ขยายเชลล์ย่อยก่อนเรียกใช้งานหรือไม่


11

ฉันมักเรียกใช้คำสั่งโดยใช้ subshells และบางครั้งต้องการที่จะขยาย subshells ก่อนที่ฉันจะทำงานบางอย่าง .. วิธีนี้ฉันสามารถตรวจสอบสิ่งที่ฉันทำและอาจแก้ไขสิ่งที่เกิดขึ้นเช่นกัน

ตัวอย่างเช่นฉันจะขยายบรรทัดคำสั่งต่อไปนี้ก่อนที่จะเรียกใช้เพื่อให้ฉันสามารถแก้ไขผลลัพธ์ของ subshell ได้อย่างไร

เช่น

$ find -name "test.txt" 
/tmp/test.txt

$ mv $(!!) /tmp/new.txt

ฉันต้องการเห็น subshell ขยายก่อนที่ฉันเรียกใช้คำสั่งเช่น:

$ mv /tmp/test.txt /tmp/new.txt

มีวิธีการทำเช่นนี้?


1
zsh สามารถทำสิ่งนี้ได้ แต่ฉันค่อนข้างมั่นใจว่าไม่สามารถทุบตีได้ ใน zsh หากคุณมีเคอร์เซอร์อยู่ที่พารามิเตอร์และกด TAB มันจะขยายออกมา
Patrick

ฉันได้เปลี่ยนไปใช้zshและมันยอดเยี่ยมมากและทำได้ตามที่คุณแนะนำ ... เคล็ดลับดี! ฉันจะทิ้งคำตอบเดิมไว้ที่นี่เพราะมันเป็นbashคำถาม
Brad Parks

คำตอบ:


5

shell-expand-line( \e\C-e) ขยายการทดแทนคำสั่งในทุบตี

$ bind -p|grep shell-ex
"\e\C-e": shell-expand-line

$(!!)\e\C-e จะเรียกใช้คำสั่งก่อนหน้าอีกครั้งและใส่ผลลัพธ์:

"\eo": "$(!!)\e\C-e"

นอกจากนี้ยังขยายการแทนคำสั่งอื่น ๆ shell-expand-wordแต่มีคำสั่งที่ไม่เหมือนใคร

ใน bash 4.0 หรือใหม่กว่าคุณสามารถเปิดใช้globstarงานพิมพ์**/file.txtและใช้glob-complete-word( \eg) หรือglob-expand-word( \C-x*)


2

นี่คือเคล็ดลับที่มีประโยชน์ - เพิ่มบรรทัดนี้ใน ~ / .inputrc (การสร้างไฟล์หากจำเป็น):

Control-x: shell-expand-line

โปรดทราบว่าคุณสามารถทำอย่างใดอย่างหนึ่งต่อไปนี้เพื่อขยายประวัติเท่านั้นหรือนามแฝงของคุณหรือทั้งสองอย่าง:

Control-x: history-expand-line

หรือ

Control-x: นามแฝงขยายสาย

หรือ

Control-x: history-and-alias-expand-line

นี่คือรวบรวมจากบล็อกนี้และคำถามนี้ใน SuperUserซึ่งคล้ายกันมาก:

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.