คุณจำคำสั่งสุดท้ายที่ผ่านมา (n-th ได้อย่างไร) ของคำสั่งก่อนหน้าที่คุณใช้กับ bash ได้อย่างไร


9

บ่อยครั้งที่ฉันออกคำสั่งต่าง ๆ ในไฟล์เดียวกัน ตัวอย่างเช่น:

$ youtube-dl aB54c4p0eo #I made this video id up on the spot
$ mv aB54c4p0eo.flv kittens.flv
$ vlc kittens.flv
$ rm kittens.flv

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

คำตอบ:


15

alt-.เป็นสิ่งที่ดีอย่างแน่นอน แต่ถ้าคุณรู้อยู่แล้วว่ามีอาร์กิวเมนต์หมายเลขใดที่คุณต้องการคุณสามารถเร็วขึ้นได้: !:nคือnอาร์กิวเมนต์ที่ th ของคำสั่งก่อนหน้า

มันมักจะเป็นประโยชน์ในการรวมสิ่งนี้เข้ากับพื้นที่เวทย์มนตร์ หากต้องการเปิดใช้งานให้ใส่Space: magic-space. input ของคุณ ด้วยการเปิดใช้งานนั้นเมื่อคุณพิมพ์ช่องว่างหลังจาก!:2นั้นจะถูกขยายเป็นค่าทันทีแทนที่จะรอให้คุณกด Enter ช่วยให้คุณไม่ได้รับการโต้แย้งโดยไม่ตั้งใจ


9

ในทุบตีคุณสามารถใช้ทางลัด+Alt กดปุ่มครั้งเดียวจะให้อาร์กิวเมนต์สุดท้าย การกดปุ่มมากกว่านั้นจะหมุนเวียนไปตามการขัดแย้งครั้งสุดท้ายของคุณ.


4

ในทุบตีผู้ออกแบบสำหรับ "คำสุดท้ายในบรรทัดคำสั่งก่อนหน้า" คือ!!$:

$ echo hello world
hello world
$ echo goodbye !!$
echo goodbye world # this is bash echoing actual cmd line before execution
goodbye world

คุณยังสามารถใช้ "caret syntax" เพื่อแทนที่ส่วนเริ่มต้นของบรรทัดคำสั่ง สิ่งนี้มีประโยชน์หากคุณต้องการรันคำสั่งหลายคำสั่งในไฟล์เดียวกัน:

file file.dat
^file^ls -l^ #gives `ls -l file.dat`
^ls -l^stat # gives `stat file.dat`

มีความเป็นไปได้อีกมากมาย ดู "การทดแทนประวัติ" ในหน้าbash (1)สำหรับรายละเอียด


ไวยากรณ์ของ
คาเร็

1
!!$สามารถเขียนได้!$เช่นกัน
Mikel

3

ใน bash คุณสามารถใช้ $ _ สำหรับอาร์กิวเมนต์บรรทัดคำสั่งสุดท้ายของคำสั่งสุดท้ายที่คุณพิมพ์:

$ youtube-dl aB54c4p0eo #I made this video id up on the spot
$ mv aB54c4p0eo.flv kittens.flv
$ vlc kittens.flv
$ rm kittens.flv

กลายเป็น:

$ youtube-dl aB54c4p0eo #I made this video id up on the spot
$ mv $_ kittens.flv
$ vlc $_
$ rm $_

0

วิธีหนึ่งที่ค่อนข้างช้าคือการเรียกคืนคำสั่งก่อนหน้าด้วยและแทนที่คำสั่งก่อนหน้าด้วยคำสั่งใหม่กว่า


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