ดำเนินการฟังก์ชั่น readline โดยไม่ต้องผูกปุ่ม?


26

ฉันแค่อ่าน readline man-page และค้นพบคำสั่งมากมายที่ฉันไม่รู้ อย่างไรก็ตามหลายคนไม่มีการเชื่อมโยงคีย์เริ่มต้น มีวิธีรันคำสั่ง unbound จากเชลล์หรือไม่?

ฉันไม่ได้ถามว่าจะผูกคำสั่งใน ~ / .inputrc ได้อย่างไร แต่จะรันมันเป็น "one off" จาก shell หรือใน bash script ได้

ตัวอย่างเช่นคำสั่ง "dump-variables" มีคำสั่งที่ฉันสามารถฟีด "ตัวแปรตัวแปร" เพื่อเป็นอาร์กิวเมนต์เพื่อให้ได้ดำเนินการ?


2
ฉันไม่คิดว่าจะมีจากคู่มือการใช้งาน readline และแหล่งที่มา
จิมปารีส

คำตอบ:


10

ฉันเชื่อว่าสิ่งที่คุณกำลังมองหาคือbindคำสั่งของตัวเอง ตามการman builtinเรียกใช้ข้อมูลbind <readline-command>ทำให้คุณสามารถใช้งานแบบครั้งเดียวได้ แต่ฉันไม่สามารถใช้งานได้เหมือนที่คู่มือบอกว่าควร ... มันทำให้กุญแจไม่ทำงานสำหรับฉัน ไมล์สะสมของคุณอาจแตกต่างกันไป ฉันพบคำสั่งต่อไปนี้ซึ่งอาจเป็นประโยชน์กับคุณ

bind -p # Equivalent to dump-functions [machine readable]
bind -P # Equivalent to dump-functions [human readable]

bind -s # Equivalent to dump-macros    [machine readable]
bind -S # Equivalent to dump-macros    [human readable]

bind -v # Equivalent to dump-variables [machine readable]
bind -V # Equivalent to dump-variables [human readable]

แก้ไขหมายเหตุ ฉันอยากจะชี้ให้เห็นว่ามันน่ารำคาญแค่ไหนที่มันไม่ทำงานเหมือนที่คู่มือบอกว่าควรเพราะถ้าคุณพิมพ์bindแล้วกด tab เพื่อกรอกข้อมูลอัตโนมัติมันจะแสดงคำสั่งทั้งหมด


3
เรียกฟังก์ชั่น readline โดยตรงอีกครั้ง: ฉันไม่คิดว่าคู่มือจริงอ้างว่าคุณสามารถทำได้ ในกรณีที่คุณกำลังหมายถึงรูปแบบไวยากรณ์bind readline-command: ฉันสงสัยว่าcommandมีย่อมาจากคำนิยาม (ทำแผนที่) สายไม่ ReadLine callable โดยตรงฟังก์ชั่น อัตโนมัติเสร็จสิ้นเป็นความดีที่กำหนดไว้ล่วงหน้าอย่างชัดเจนในบางแพลตฟอร์ม (เช่น Fedora 20) แต่ไม่ได้อยู่ในอื่น ๆ อีกมากมาย ; การแสดงตนไม่ได้หมายความว่าคุณสามารถเรียกฟังก์ชั่นที่ ReadLine โดยตรง - มันเป็นธรรม "โง่" ข้อมูลจำเพาะคำสั่งเสร็จ: เสร็จสิ้นการทำงานบนใด ๆbindโต้แย้งจ่ายให้กับ
mklement0

1
+1 สำหรับคำสั่งในการแสดงฟังก์ชั่น / มาโคร / ตัวแปรที่มีผลบังคับใช้; เป็นมูลค่าเพิ่ม-Xสำหรับคำสั่งเชลล์ (กำหนดผ่าน-x )
mklement0
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.