เรียกใช้คำสั่งด้วยอาร์กิวเมนต์จากคำสั่งสุดท้าย


34

เมื่อเรียกใช้คำสั่งบางครั้งคุณอาจต้องเรียกใช้คำสั่งด้วยอาร์กิวเมนต์จากคำสั่งสุดท้าย คุณจะทำสิ่งนี้ได้อย่างไร

แน่นอนยกเว้นการใช้ปุ่มลูกศรและDelปุ่ม: ... ...DelDelDelDel<new_command>

คำตอบ:


45

ตัวอย่างเช่นหากคุณรันคำสั่งนี้:

mkdir long_path_here/new_dir

เป็นไปได้มากว่าคุณต้องการไปในสารบบที่เพิ่งสร้างขึ้น คุณสามารถทำได้โดยใช้ "ทางลัด" ถัดไป:

  • cd Esc.- พิมพ์cdและหลังจากกดEscตามด้วย.(ไม่ใช่ในเวลาเดียวกัน) หากคำสั่งก่อนหน้าไม่มีข้อโต้แย้งคุณจะได้รับคำสั่งก่อนหน้านี้เอง
  • cd !*- ในกรณีนี้คุณจะได้รับข้อโต้แย้งทั้งหมดจากคำสั่ง previuos หากคำสั่งก่อนหน้าไม่มีข้อโต้แย้งคุณจะไม่ได้รับอะไรเลย
  • cd Alt+ .- พิมพ์cdและหลังจากกดAltและ.(ในเวลาเดียวกัน) ในความเป็นจริงการใช้วิธีนี้และกด.(โดยไม่ปล่อยAlt) ต่อไปคุณจะได้รับอาร์กิวเมนต์สุดท้ายสำหรับทุกคำสั่งจากประวัติ หากคำสั่งไม่มีข้อโต้แย้งคุณจะได้รับคำสั่งนั้นเอง

โดยทั่วไป: <command> Esc.หรือ<command> !*หรือ+<command> Alt.


ว้าวคุณช่วยฉันได้หลายร้อยชั่วโมงฉันจะต้องสิ้นเปลืองในอีกไม่กี่ปีข้างหน้า
pranavk

32

มีช็อตคัตบางอย่างหากคุณต้องการอาร์กิวเมนต์ทั้งหมดจากคำสั่งก่อนหน้าหรือเพียงแค่อาร์กิวเมนต์สุดท้าย

  • สำหรับข้อโต้แย้งทั้งหมด: <command> !*
  • สำหรับอาร์กิวเมนต์สุดท้าย: <command> !$

ตัวอย่าง:

ls foo/ bar/
ls !* # Gives the results of ls foo/ bar/

ls foo/ bar/
ls !$ # Gives the results of ls bar/

หากคุณต้องการอาร์กิวเมนต์เดียวจากรายการอาร์กิวเมนต์จากคำสั่งก่อนหน้าคุณสามารถใช้ <command> !!:<argNumber>

ตัวอย่าง:

ls foo/ bar/ baz/
ls !!:2 # Gives the results of ls bar/
ls foo/ bar/ baz/
ls !!:1 # Gives the results of ls foo/

2
คุณต้องการเพียงหนึ่ง!เวอร์ชันในเวอร์ชัน ARG เดียวเช่น!:2. สมมติว่าทุบตีเริ่มต้น
belacqua

3
นอกจากนี้คุณยังสามารถใช้ในสถานที่ของ!^ !:1
Paddy Landau

7

กล่าวถึง!*และ!$เป็นสิ่งที่ดี แต่เมื่อคุณต้องแก้ไขทางลัด readline เล็ก ๆ น้อย ๆ มาช่วย!

ตัวอย่างเช่นแทนที่จะนับไม่ถ้วน... DelDelDel... Delคุณสามารถกด Ctrl-a(ข้ามไปยังจุดเริ่มต้นของบรรทัด) Alt+d(ลบไปยังท้ายคำ)

สำหรับข้อมูลเพิ่มเติมและการค้นหาสำหรับman readlineDefault key bindings


4

เพื่อที่จะใช้nอาร์กิวเมนต์ TH จากคำสั่งก่อนหน้าของคุณชนิดAlt+ +n Alt_ตัวอย่างเช่นหลังจาก:

$ echo 1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10

การพิมพ์echoตามด้วยAlt2Alt_จะให้สิ่งนี้แก่คุณในการแจ้งครั้งต่อไป:

$ echo 2

"ภาพหน้าจอ" หลังจากที่คุณชมAlt2คือ:

(arg: 2) echo

คุณสามารถทำซ้ำAlt_หลาย ๆ ครั้งเพื่อรับnอาร์กิวเมนต์ th ของคำสั่งก่อนหน้าอย่างต่อเนื่อง

r="fc -s"อีกหนึ่งความคิดที่มีประโยชน์คือการกำหนดชื่อแทน จากนั้นคุณสามารถทำการแทนที่คำสั่ง:

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