รันคำสั่ง xdotool หลายคำสั่งในหนึ่งบรรทัดแยกจากกัน


11

ฉันพยายามที่จะเรียกใช้xdotool type wordแล้วxdotool key Returnจากการตั้งค่าเริ่มต้น Aplications
แต่ถ้าฉันใช้&&หรือ;xdotool ประเมินว่ามันเป็นความต่อเนื่องของอินพุต


1
ในกรณีใช้งานของฉันมันใช้งานได้กับxdotool type $'word\r'กรณีที่การ$''หลบหนี\rไปยังสิ่งที่ต้องการกลับ ( \nไม่ทำงานที่นี่)
Scz

คำตอบ:


16

เรื่องสั้นสั้น ๆ :
ใช้สคริปต์

#! /bin/sh
# With some window selection magic, or a sleep 
# if you want to do that manually.
xdotool type word
xdotool key Return

และใส่เส้นทางของสคริปต์ในExecสนาม


เรื่องยาว:

ตามxdotoolmanpage :

type
       Supports newlines and tabs (ASCII newline and tab). 
       With respect to "COMMAND CHAINING", this command consumes the
       remainder of the arguments and types them. That is, no commands can
       chain after 'type'.

การโยงคำสั่งผ่าน;หรือ&ไม่สามารถทำได้เนื่องจากเป็นไวยากรณ์ของเชลล์และแอปพลิเคชันเริ่มต้นไม่รองรับไวยากรณ์ของเชลล์ อย่างไรก็ตามหากสิ่งที่คุณต้องการทำคือกดEnterหลังจากพิมพ์บางสิ่งแล้วก็มีวิธีอ้อมไปทำเช่นนั้น

เมื่อมันบอกว่า "ASCII" \nขึ้นบรรทัดใหม่ก็ไม่ได้หมายความเปลือย และการทดแทนคำสั่ง ( xdotool type "$(printf '\n')"พูด) กินการขึ้นบรรทัดใหม่ หลังจากxdotoolsโพสต์ฟอรัมนี้ฉันได้ลอง:

xdotool type "$(printf 'date\n ')"

และมันก็ใช้งานได้ แต่มันจะใช้งานได้ก็ต่อเมื่อมีตัวละครบางตัวอยู่หลัง\nและสิ่งนี้ทำให้พื้นที่ต่อท้ายซึ่งจะไม่เป็นอย่างที่คุณต้องการ ฉันแก้ไขสิ่งนั้นเป็น:

xdotool type "$(printf 'date\n\e ')"

และนี่ใช้งานได้และไม่ทิ้งพื้นที่ต่อท้าย อย่างไรก็ตามมันอาจทำให้เกิดปัญหาสำหรับผู้ที่ใช้โหมด Vi ในเปลือกของพวกเขา

ขอบคุณที่ความคิดเห็นของ @ steeldriverฉันคิดว่านี่เป็นเพราะฉันลองใช้งานในเทอร์มินัลที่ฉันกำลังใช้งานคำสั่ง เพียงช่องว่างเล็ก ๆ ระหว่างการกดEnterและxdotoolคำสั่งก็เพียงพอสำหรับการขึ้นบรรทัดใหม่เดียวที่จะลงทะเบียนอย่างถูกต้อง ดังนั้น:

sleep 0.1; xdotool type $'date\n'

ดังนั้นการขยายสายโดยการอ้างอิง:

xdotool type 'date
'

หรือใช้การตีความเชลล์ตามที่ @steeldriver แนะนำดูเหมือนว่าตัวเลือกที่เหมาะสม

อย่างไรก็ตามสคริปต์ประกอบด้วย:

#! /bin/sh
sleep 1
xdotool type date
xdotool key Return

ในExecสนามทำงานได้ดี แน่นอนฉันแนะนำให้ใช้สคริปต์สำหรับคำสั่งที่ซับซ้อนในไฟล์เดสก์ท็อป

คุณสามารถมีสคริปต์ด้วย/usr/bin/xdotoolใน shebang แต่ manpage บอกว่า " scriptโหมดไม่เต็มไปด้วยเลือดและอาจต่ำกว่าความคาดหวังของคุณ" ดังนั้นฉันจึงติดกับสคริปต์ทุบตี

ฉันอาจจะได้เห็นสิ่งที่ แต่ในคู่แรกของฉันพยายามที่ผมต้องใส่ (เล็ก) sleepระหว่างtypeและkeyคำสั่ง นั่นเป็นสิ่งประดิษฐ์ของการทดลองใช้บนเทอร์มินัลที่กำลังเรียกใช้คำสั่งแทนหน้าต่างอื่น


ขึ้นบรรทัดใหม่ตามตัวอักษรดูเหมือนว่าจะทำงานxdotool type 'wordแล้วตามด้วยคีย์ 'Enter' และจากนั้นปิด'เช่นเดียวกับ$'word\n'(ซึ่งทุบตีขยาย\nเพื่อขึ้นบรรทัดใหม่ตามตัวอักษรก่อนที่จะผ่านการโต้แย้งไปxdotool)
ขับเหล็ก

@steeldriver hit-and-miss นั่นเป็นหนึ่งในสิ่งแรกที่ฉันลองและไม่ได้ผล
muru

@steeldriver สิ่งที่ทำงานสองบรรทัดใหม่ (สอง Enters ก่อนปิด'หรือสอง\ns พร้อมกับ$เคล็ดลับ)
muru

มันแปลกมากการขึ้นบรรทัดใหม่ไม่จำเป็นสำหรับฉัน - ฉันสงสัยว่ามันขึ้นอยู่กับแอปพลิเคชันที่เป็นเจ้าของหน้าต่างเป้าหมาย (ฉันใช้เอกสารเปล่าใน geany) หรือไม่
ขับเหล็ก

@steeldriver ขอบคุณสำหรับคำแนะนำ ดีใจที่ได้รู้ว่าฉันไม่ได้เห็นภาพหลอนเกี่ยวกับความต้องการsleep(ดูหมายเหตุในข้อความขนาดเล็ก) ฉันไม่ได้เปลี่ยน windows และลองใช้กับหน้าต่างเดียวกัน แต่ด้วย a sleep 1ทั้งสองวิธีทำงานกับทั้งหน้าต่างเดิมและหลังจากเปลี่ยน ฉันเดาว่าฉันกดปุ่ม Enter ของตัวเองจะรบกวนการขึ้นบรรทัดใหม่ของ xdotool อย่างไรก็ตามสำหรับความต้องการที่ซับซ้อนมากขึ้นของไฟล์เดสก์ท็อปฉันยังคงแนะนำสคริปต์
muru

1

ดูเหมือนว่าแอปพลิเคชันจะไม่แยกวิเคราะห์คำสั่งหลายคำสั่งโดยให้ถือว่าเป็นคำสั่งเดียว เช่นนั้นทำให้มันเป็นคำสั่งเดียวโดยการตัดมันเรียกเชลล์ ...

bash -c 'xdotool type date; xdotool key Return'

ตอนนี้คุณสามารถทำสิ่งอื่น ๆ ในเปลือกได้ ...

bash -c 'xdotool type "`date +"%Y-%m-%d_%T`"'

โปรดทราบว่าคำสั่ง "date" ที่ใช้ในครั้งสุดท้ายนั้นรวมถึงการขึ้นบรรทัดใหม่! และ "xdotool" จะส่งออก

หมายเหตุ: หากคุณทำสิ่งนี้เป็นมาโครแป้นพิมพ์ฉันจะเพิ่มตัวเลือกเพิ่มเติมอีกสองสามตัวใน "xdotool" เพื่อให้การทำงานนี้ดีขึ้น ...

bash -c 'xdotool type --clearmodifiers -delay 0 "`date +"%Y-%m-%d_%T`"'
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.