คำตอบของฉันเสนอคำสั่งอย่างง่ายในไวยากรณ์ที่แตกต่างกันสามแบบซึ่งทำงานได้อย่างเท่าเทียมกัน แต่ข้อหนึ่งสั้นกว่าและง่ายกว่าในการพิมพ์ครั้งที่สอง รูปแบบที่สามเป็นนามแฝงที่เรียกว่าซึ่งหมายความว่าคุณสามารถกำหนดชื่อที่กำหนดเองและเรียกมันด้วยคำสั่งโดยเรียกใช้งานโดยไม่ต้องจำสิ่งที่ซับซ้อน
เตรียม:
ก่อนอื่นให้ติดตั้งแพ็คเกจxsel
ที่อนุญาตให้คุณเข้าถึง X คลิปบอร์ดจากเทอร์มินัล:
sudo apt-get install xsel
รูปแบบคำสั่ง 1 (สั้น):
หลังจากนั้นคุณสามารถพิมพ์บรรทัดต่อไปนี้เพื่อคัดลอกคำสั่งก่อนหน้าไปยังคลิปบอร์ด:
xsel -ib <<<!!:q
หากคุณต้องการคัดลอกคำสั่งล่าสุดลำดับที่สองให้แทนที่!!
ด้วย!-2
สำหรับการใช้งานครั้งที่สามครั้งล่าสุด!-3
เป็นต้น
หากต้องการอธิบายสิ่งที่คุณกำลังใช้งานอยู่ให้แบ่งคำสั่งสั้น ๆ ดังนี้
xsel
เป็นเครื่องมือบรรทัดคำสั่งในการเข้าถึง X คลิปบอร์ด
สำหรับข้อมูลเพิ่มเติมโปรดอ่านมัน manpage ออนไลน์man xsel
หรือโดยการทำงาน
-i
พารามิเตอร์บอกxsel
ไปอ่านจาก stdin (ปกติใส่แป้นพิมพ์นี้หมายถึง แต่เรากำลังจะเปลี่ยนเส้นทางบางสิ่งบางอย่างที่นี่)
-b
ระบุพารามิเตอร์ที่จะใช้คลิปบอร์ดแทนเอ็กซ์ "หลัก" หรือเลือก "รองที่"
<<<
เป็นไวยากรณ์ Bash พิเศษที่เรียกว่า "Here String"
มันขยายพื้น (ไม่ประเมิน!) อาร์กิวเมนต์ (เพียงหนึ่ง!) หลังจากนั้นและเปลี่ยนเส้นทางมันเป็นสตริงไปยัง stdin (อินพุตมาตรฐาน) ของคำสั่งก่อน / หลังที่มันยืน
!!:q
เรียกว่า "คำสั่งปัง" สำหรับการขยายประวัติในทุบตี มันจะแทนที่ตัวเองด้วยบรรทัดคำสั่งที่พิมพ์ไว้ก่อนหน้านี้
สำหรับข้อมูลเพิ่มเติมอ่านมันเป็น manpage ท้องถิ่นโดยการเรียกใช้man history
(manpage ออนไลน์ไม่เป็นประโยชน์)
- ย่อมาจากบรรทัดคำสั่งก่อนหน้านี้และเป็นคำพ้องสำหรับ
!!
เห็นได้ชัดว่าหมายถึงบรรทัดคำสั่งสุดท้ายที่สอง อย่าลืมเครื่องหมายลบมิฉะนั้นจะส่งคืนคำสั่ง 2nd (3rd / ... ) ที่คุณเคยพิมพ์!-1
!-2
-
- การ
:q
แก้ไขคำสั่ง bang และบอกให้ bash ล้อมรอบการทดแทนในอัญประกาศเดี่ยว ( '
) เพื่อป้องกันการขยายตัวเพิ่มเติมโดยเชลล์
รูปแบบคำสั่ง 2 (อีกต่อไปเล็กน้อย):
echo !!:q | xsel -ib
echo
มีงานง่าย ๆ ในการพิมพ์อาร์กิวเมนต์ทั้งหมดไปยัง stdout ของเทอร์มินัล
!!:q
เรียกว่า "คำสั่งปัง" สำหรับการขยายประวัติในทุบตี มันจะแทนที่ตัวเองด้วยบรรทัดคำสั่งที่พิมพ์ไว้ก่อนหน้านี้
- ย่อมาจากบรรทัดคำสั่งก่อนหน้านี้และเป็นคำพ้องสำหรับ
!!
!-1
เห็นได้ชัดว่า!-2
หมายถึงบรรทัดคำสั่งสุดท้ายที่สอง อย่าลืมเครื่องหมายลบ-
มิฉะนั้นจะส่งคืนคำสั่ง 2nd (3rd / ... ) ที่คุณเคยพิมพ์
- การ
:q
แก้ไขคำสั่ง bang และบอกให้ bash ล้อมรอบการทดแทนในอัญประกาศเดี่ยว ( '
) เพื่อป้องกันการขยายตัวเพิ่มเติมโดยเชลล์
|
เป็นท่อ โดยจะเปลี่ยนทิศทางเอาต์พุตเทอร์มินัล ("stdout") ของคำสั่งก่อนหน้านี้ไปยังเทอร์มินัลอินพุต ("stdin") ของคำสั่งหลังจากนั้น
xsel
เป็นเครื่องมือบรรทัดคำสั่งในการเข้าถึง X คลิปบอร์ด
สำหรับข้อมูลเพิ่มเติมโปรดอ่านมัน manpage ออนไลน์man xsel
หรือโดยการทำงาน
-i
พารามิเตอร์บอกxsel
ไปอ่านจาก stdin (ปกติใส่แป้นพิมพ์นี้หมายถึง แต่เรากำลังจะเปลี่ยนเส้นทางบางสิ่งบางอย่างที่นี่)
-b
ระบุพารามิเตอร์ที่จะใช้คลิปบอร์ดแทนเอ็กซ์ "หลัก" หรือเลือก "รองที่"
รูปแบบคำสั่ง 3 (นามแฝง):
นามแฝงทุบตีเป็นสิ่งที่ยอดเยี่ยมหากคุณไม่ต้องการที่จะจำคำสั่งยาวหรือซับซ้อนที่คุณมักใช้ คุณสามารถกำหนดคำสั่งนี้ให้กับชื่อนามแฝงง่ายๆซึ่งคุณสามารถเรียกใช้แทนคำสั่งแบบยาวเพื่อให้ได้ผลลัพธ์เดียวกัน
น่าเสียดายเนื่องจากคำสั่ง bang เป็นคุณลักษณะ Bash พิเศษและขยายก่อนที่นามแฝงจะได้รับการแก้ไขคุณไม่สามารถใช้นามแฝงของรูปแบบใดรูปแบบหนึ่งด้านบนได้เนื่องจาก!!
ส่วนจะไม่ทำงาน มีวิธีแก้ปัญหาว่า
ในการตั้งค่านามแฝงให้รันบรรทัดต่อไปนี้ในเทอร์มินัลของคุณ โปรดทราบว่าคุณสามารถเลือกชื่อตัวแปร Bash ที่ถูกต้องแทนcopylastcommand
:
alias copylastcommand='history -p \!\! | xsel -ib'
อย่างไรก็ตามนี่จะคงอยู่สำหรับเซสชัน Bash ปัจจุบันของคุณเท่านั้นซึ่งหมายความว่านามแฝงจะหายไปหลังจากคุณปิดหน้าต่างเทอร์มินัล คุณสามารถทำให้มันคงอยู่ในทุกช่วงเวลาของ Bash ของคุณโดยเพิ่มบรรทัดนี้ด้านบนไปยังจุดสิ้นสุดของ~/.bashrc
ไฟล์ของคุณหรือ~/.bash_aliases
ไฟล์ของคุณถ้าคุณมี
อีกครั้งการย่อบรรทัด
alias name='command'
เป็นไวยากรณ์ในการตั้งค่านามแฝงใน Bash command
จะถูกเรียกใช้เมื่อใดก็ตามที่คุณดำเนินการname
ต่อจากนี้ไป
history -p \!\!
เอาต์พุตบรรทัดคำสั่งที่เรียกใช้งานก่อนหน้านี้เป็น stdout (เอาต์พุตมาตรฐาน) หากไม่มี-p
สวิตช์มันจะไม่เพียงพิมพ์ แต่ยังเรียกใช้คำสั่งอีกครั้ง
โปรดทราบว่าเราต้องหลีกเลี่ยงการ!
ใช้เครื่องหมาย( ) ด้วยเครื่องหมายแบ็กสแลช ( \
) เพราะมิฉะนั้นทุบตีจะขยายออกเมื่อเราพยายามตั้งชื่อแทนซึ่งไม่สมเหตุสมผลเท่าที่ควร
อีกครั้งคุณยังสามารถระบุ [N] คำสั่งล่าสุด -th โดยการเปลี่ยนปังสองด้วยเช่น-n
\!-2
|
เป็นท่อ มันเปลี่ยนเส้นทางออกมาตรฐาน ("stdout") ของคำสั่งก่อนที่มันจะมาตรฐานขั้ว ("stdin") ของคำสั่งหลังจากนั้น
xsel
เป็นเครื่องมือบรรทัดคำสั่งในการเข้าถึง X คลิปบอร์ด
สำหรับข้อมูลเพิ่มเติมโปรดอ่านมัน manpage ออนไลน์man xsel
หรือโดยการทำงาน
-i
พารามิเตอร์บอกxsel
ไปอ่านจาก stdin (ปกติใส่แป้นพิมพ์นี้หมายถึง แต่เรากำลังจะเปลี่ยนเส้นทางบางสิ่งบางอย่างที่นี่)
-b
ระบุพารามิเตอร์ที่จะใช้คลิปบอร์ดแทนเอ็กซ์ "หลัก" หรือเลือก "รองที่"
<<<"!!" xsel -ib