มีวิธีใน Bash เพื่อเรียกคืนอาร์กิวเมนต์ของคำสั่งก่อนหน้าหรือไม่?
ฉันมักจะตามมาด้วยvi file.c
gcc file.c
มีวิธีใน Bash เพื่อเรียกคืนอาร์กิวเมนต์ของคำสั่งก่อนหน้าหรือไม่?
มีวิธีใน Bash เพื่อเรียกคืนอาร์กิวเมนต์ของคำสั่งก่อนหน้าหรือไม่?
ฉันมักจะตามมาด้วยvi file.c
gcc file.c
มีวิธีใน Bash เพื่อเรียกคืนอาร์กิวเมนต์ของคำสั่งก่อนหน้าหรือไม่?
คำตอบ:
คุณสามารถใช้$_
หรือ!$
เพื่อเรียกคืนอาร์กิวเมนต์สุดท้ายของคำสั่งก่อนหน้า
นอกจากนี้ยังAlt + .
สามารถใช้เพื่อเรียกคืนอาร์กิวเมนต์สุดท้ายของคำสั่งก่อนหน้าใด ๆ
!!:1
และ!!:2
อื่น ๆ ( !!:0
เป็นคำสั่งก่อนหน้านี้เอง) ดูgnu.org/software/bash/manual/bashref.html#History-Interaction
!$
คุณใช้!^
สำหรับอาร์กิวเมนต์แรก
echo tiger rabbit
ฉันจะดูtiger
คำสั่งต่อไปนี้ได้อย่างไร
Alt + .
ไม่ทำงานในโหมด vi แค่ FYI สำหรับคนอื่นที่สับสนที่นี่
หากคำสั่งก่อนหน้ามีสองข้อโต้แย้งเช่นนี้
ls a.txt b.txt
และคุณต้องการอันแรกคุณสามารถพิมพ์ได้
!:1
ให้
a.txt
หรือถ้าคุณต้องการทั้งสองคุณสามารถพิมพ์
!:1-2
ให้
a.txt b.txt
คุณสามารถขยายสิ่งนี้เป็นอาร์กิวเมนต์จำนวนเท่าใดก็ได้เช่น:
!:10-12
-bash: :1-2: bad word specifier
ls a.txt
บรรทัด 2ll !:1-2
!:^-$
สามารถใช้หรือรหัสที่คล้ายกันของหลักสูตรร่วมกับตัวเลข
!!:n
โดยที่n
0 คือตำแหน่งของอาร์กิวเมนต์ที่คุณต้องการ
ตัวอย่างเช่น:
echo 'one' 'two'
# "one two"
echo !!:2
# "two"
!
คำนำหน้าจะใช้ในการเข้าถึงคำสั่งก่อนหน้านี้
คำสั่งที่มีประโยชน์อื่น ๆ :
!$
- อาร์กิวเมนต์สุดท้ายจากคำสั่งก่อนหน้า!^
- อาร์กิวเมนต์แรก (หลังจากโปรแกรม / built-in / script) จากคำสั่งก่อนหน้า!!
- คำสั่งก่อนหน้า (มักออกเสียง "ปังปัง")!n
- หมายเลขคำสั่งn
จากhistory
!pattern
- การจับคู่คำสั่งล่าสุด pattern
!!:s/find/replace
- คำสั่งสุดท้ายแทนที่find
ด้วยreplace
!!:s/find/replace
^find^replace
!*
- อาร์กิวเมนต์ทั้งหมดจากคำสั่งก่อนหน้า (หลังจากโปรแกรม / built-in / script) เช่น: ls *.tmp *.cache rm !*
ในบรรทัดคำสั่งคุณสามารถกดesc- .หรือalt+.
มันวนรอบอาร์กิวเมนต์สุดท้ายของคำสั่งก่อนหน้าของคุณ
↑
และ↓
ปุ่มเพื่อทำงานเช่นกัน
หากคุณทราบหมายเลขที่ให้ไว้ในประวัติของคำสั่งเฉพาะคุณสามารถรับอาร์กิวเมนต์ใด ๆ ในคำสั่งนั้นโดยใช้คำต่อไปนี้
ใช้การติดตามเพื่อรับอาร์กิวเมนต์ที่สองจากคำสั่งที่สามในประวัติ
!3:2
ใช้คำสั่งต่อไปนี้เพื่อรับอาร์กิวเมนต์ที่สามจากคำสั่งสุดท้ายที่ห้าในประวัติ
!-5:3
การใช้เครื่องหมายลบคุณขอให้มันสำรวจจากคำสั่งสุดท้ายของประวัติ
! * รันคำสั่งใหม่พร้อมด้วยอาร์กิวเมนต์ก่อนหน้าทั้งหมด
ls /tmp
cd !*
#you are now in /tmp
$_
แทน
ใช่คุณสามารถใช้!$
เพื่อเรียกคืนอาร์กิวเมนต์สุดท้ายของคำสั่งก่อนหน้า