ฉันจะรันสคริปต์ใน 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"'
แต่หลังจากปิดเทอร์มินัลสิ่งที่ดูเหมือนว่าจะถูกรีเซ็ตและปุ่มลัดทั้งหมดหายไป