วิธีเรียกใช้สคริปต์ในเชลล์เมื่อกดปุ่มทางลัด


14

ฉันจะรันสคริปต์ใน Shell ได้อย่างไรเมื่อกดปุ่มทางลัด

โดยพื้นฐานแล้วสิ่งที่ฉันต้องการคือเมื่อกดคีย์ลัดสคริปต์ควรอ่านจากไฟล์และแสดงเนื้อหานั้นในเทอร์มินัล


ฉันลองวิธีที่คุณใช้bind '"\e[24~":"airmon-ng start wlan0\n"'แต่หลังจากปิดเทอร์มินัลสิ่งที่ดูเหมือนว่าจะถูกรีเซ็ตและปุ่มลัดทั้งหมดหายไป

คำตอบ:


20

คุณสามารถใช้คำสั่ง builtin bindเพื่อแมปแป้นพิมพ์ลัดเพื่อที่จะเรียกใช้งานคำสั่ง / เชลล์สคริปต์

ตัวอย่าง

สมมติว่าเราต้องการเรียกใช้คำสั่งpwdเมื่อเรากดF12ปุ่ม

$ bind '"\e[24~":"pwd\n"'

ตอนนี้เมื่อฉันกดF12ที่พร้อมท์ของฉัน$:

$ pwd
/home/saml

การกำหนดแป้นพิมพ์ลัด

คุณสามารถใช้เทคนิคต่อไปนี้เพื่อกำหนดรหัสยกเว้นสำหรับแป้นพิมพ์ลัดที่กำหนด ในระบบส่วนใหญ่กดCtrl+ Vปล่อยแล้วกดปุ่มที่คุณต้องการรหัส มีบางระบบอื่น ๆ ที่มันจะทำงานด้วยMแทนV

ตัวอย่าง

การกดCtrl+ Vจากนั้นปล่อยทั้งสองCtrlและVในที่สุดกด F12ในหน้าต่างเทอร์มินัลส่งคืนสิ่งนี้:

$ ^[[24~

เอาต์พุตนี้สามารถตีความได้ดังต่อไปนี้^[เป็นEscกุญแจสำคัญ ดังนั้นเมื่อเราต้องการระบุคีย์นี้โดยใช้bindคำสั่งเราจำเป็นต้องใช้ a \eเพื่อแสดงถึงEscคีย์ตามด้วยทุกอย่างจากด้านบน ดังนั้นbindคำสั่งจะเป็นดังนี้:

$ bind '"\e[24~":"....."'

การดำเนินการคำสั่งที่อยู่ตรงกลาง

คุณยังสามารถใช้bind -xการตั้งค่าแป้นพิมพ์ลัดที่จะเรียกใช้คำสั่งในขณะที่คุณกำลังพิมพ์บางอย่างที่พรอมต์และผลลัพธ์ของคำสั่งเหล่านี้จะปรากฏขึ้น แต่สิ่งที่คุณเคยพิมพ์ที่พรอมต์จะยังคงอยู่

$ bind -x '"\eW":"..."'

หมายเหตุ:วิธีนี้ใช้ได้กับแป้นพิมพ์ลัดที่มีอักขระ 1 ตัวเท่านั้นดังนั้นF12จะไม่ทำงานที่นี่

ตัวอย่าง

Let 's นามแฝงแป้นพิมพ์ลัดAlt+ +ShiftW

$ bind -x '"\eW":"who"'

สมมติว่าฉันพิมพ์คำสั่งfinger:

$ finger

ตอนนี้ฉันกดแป้นพิมพ์ลัดAlt+ Shift+ W:

saml     tty1         2013-09-01 11:01 (:0)
saml     pts/0        2013-09-01 11:03 (:0.0)
saml     pts/1        2013-09-01 11:05 (:0.0)
saml     pts/2        2013-09-01 11:05 (:0.0)
saml     pts/5        2013-09-03 22:45 (:0.0)
$ finger

สิ่งที่เกิดขึ้นก็bindคือการรันคำสั่งที่กำหนดwhoเอาเอาท์พุทและใส่ไว้ด้านหน้าพรอมต์ หากคุณทำซ้ำคุณจะเห็นสิ่งที่เกิดขึ้นนี่คือผลลัพธ์จากฉันกดปุ่ม 2 ครั้ง:

saml     tty1         2013-09-01 11:01 (:0)
saml     pts/0        2013-09-01 11:03 (:0.0)
saml     pts/1        2013-09-01 11:05 (:0.0)
saml     pts/2        2013-09-01 11:05 (:0.0)
saml     pts/5        2013-09-03 22:45 (:0.0)
saml     tty1         2013-09-01 11:01 (:0)
saml     pts/0        2013-09-01 11:03 (:0.0)
saml     pts/1        2013-09-01 11:05 (:0.0)
saml     pts/2        2013-09-01 11:05 (:0.0)
saml     pts/5        2013-09-03 22:45 (:0.0)
$ finger

ปัญหาของคุณ

ดังนั้นความคิดหนึ่งก็คือการใช้bind -xวิธีการด้านบนและcatเพื่อแสดงไฟล์ข้อความนี้ตามที่คุณต้องการ:

$ bind -x '"\eW":"cat someinfo.txt"'

ตอนนี้เมื่อฉันเรียกใช้คำสั่งฉันสามารถดูไฟล์นี้เช่น:

This is text from some 
multi-line file reminding
me how to do some 
stuff
$ finger 

someinfo.txtกำลังแสดงผลของไฟล์ด้านบนfingerคำสั่งของฉันด้านบน

อ้างอิง


ฉันต้องการเพียงเพื่อแสดงเนื้อหาไม่ใช่เพื่อดำเนินการ
3539

ดังนั้นผูกกับสคริปต์ที่แสดงเนื้อหา
Lars Rohrbach

1
Ctrl + m ไม่ทำงานสำหรับฉัน มันทำหน้าที่ราวกับว่าฉันเพิ่งกด Enter อีกทางเลือกหนึ่งที่ผมคิดว่า (ฉันเป็นมือใหม่ทุบตี) คือการพิมพ์echo ' (พื้นที่หลังจากที่อ้างเดียว) จากนั้นกด Ctrl + v แล้วที่สำคัญที่คุณต้องการและจากนั้นพื้นที่อ้างเดียว ... ตามที่อธิบายไว้ที่นี่ ตัวอย่าง:echo ' ^[OD '
aliteralmind
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.