ฉันจะรันสคริปต์ใน Shell ได้อย่างไรเมื่อกดปุ่มทางลัด
โดยพื้นฐานแล้วสิ่งที่ฉันต้องการคือเมื่อกดคีย์ลัดสคริปต์ควรอ่านจากไฟล์และแสดงเนื้อหานั้นในเทอร์มินัล
ฉันจะรันสคริปต์ใน Shell ได้อย่างไรเมื่อกดปุ่มทางลัด
โดยพื้นฐานแล้วสิ่งที่ฉันต้องการคือเมื่อกดคีย์ลัดสคริปต์ควรอ่านจากไฟล์และแสดงเนื้อหานั้นในเทอร์มินัล
คำตอบ:
คุณสามารถใช้คำสั่ง 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คำสั่งของฉันด้านบน
echo ' (พื้นที่หลังจากที่อ้างเดียว) จากนั้นกด Ctrl + v แล้วที่สำคัญที่คุณต้องการและจากนั้นพื้นที่อ้างเดียว ... ตามที่อธิบายไว้ที่นี่ ตัวอย่าง:echo ' ^[OD '
bind '"\e[24~":"airmon-ng start wlan0\n"'แต่หลังจากปิดเทอร์มินัลสิ่งที่ดูเหมือนว่าจะถูกรีเซ็ตและปุ่มลัดทั้งหมดหายไป