วิธีคัดลอกคำสั่งที่ป้อนก่อนหน้านี้โดยใช้ยูทิลิตี้ประวัติโดยไม่ต้องรันอีกครั้ง?


14

ฉันสามารถใช้historyคำสั่งบน CentOS เพื่อรับรายการคำสั่งที่ป้อนก่อนหน้านี้ แต่ถ้าฉันทำสิ่งที่ชอบ: !372ประวัติศาสตร์จะพยายามเรียกใช้คำสั่งที่อ้างอิง

ฉันต้องการคำสั่ง run ก่อนหน้านี้เพื่อให้ปรากฏที่เคอร์เซอร์ปัจจุบัน นี่คือตัวอย่าง:

[dev@home ~]$ previous_command_no_execute!372  

คำตอบ:


25

วางมันลงบนบรรทัดคำสั่งของคุณ:

$ !372

จากนั้นกดปุ่มตามด้วยESC CTRL+Eสิ่งนี้จะขยายอัตโนมัติในบรรทัดคำสั่งโดยไม่ต้องเรียกใช้งานจริง (ขยายทุกอย่างในบรรทัดรวมถึง env vars ด้วย)

สิ่งนี้ใช้ได้กับ Bash เท่าที่ฉันทราบ


ใช่นี่คือทางออกที่แน่นอน
centosnoob

1
สำหรับวิธีแก้ปัญหาใน zsh กดที่แท็บหลังจากพิมพ์!372แล้วมันจะขยายให้คุณ
เรด

10

คุณสามารถใช้Ctrlrแล้วพิมพ์อักขระบางตัวจากคำสั่งเดิมเช่น

(reverse-i-search)`/etc': sudo /etc/init.d/apache2 restart

ด้านบนฉันพิมพ์Ctrl-r /etcและมันดึงsudo /etc/init.d/apache2 restartคำสั่งจากประวัติศาสตร์


6

history | grep 372 ควรจะทำงานใช่ไหม

แก้ไข:

นอกจากนี้คุณสามารถทำบางสิ่งเช่นecho !372 > /dev/clipใส่ไดเรกทอรีคำสั่งลงในคลิปบอร์ดได้


ทำงานให้ฉันเสมอ ...
voretaq7

ไม่เพียงแค่พบว่าคำสั่งที่เฉพาะเจาะจงทำงานก่อนหน้านี้
centosnoob

จากนั้นทั้งตัวฉันเองและ @ voretaq7 ก็เข้าใจผิดคำถามของคุณ บางทีคุณอาจจะชัดเจนกว่านี้หน่อยได้ไหม?
MDMarra

@MDMarra ฉันได้อัปเดตคำถามแล้ว ฉันหวังว่ามันจะส่องแสงเพิ่มเติม
centosnoob

@centosnoob มองไปที่การปรับปรุงของคุณและสมมติว่าคอนโซลของคุณสนับสนุนเมาส์คัดลอกและวาง (และมันเป็นเรื่องยากที่จะเป็นโดยตรงบนคอนโซลขั้วสไตล์ที่ไม่มีความสามารถในการคัดลอกวางวันนี้) การคัดลอกและวางวิธีการแก้ปัญหาที่เป็นจริงที่เจ็บปวดน้อย . การแก้ไขคำสั่งแบบ vi ตามที่ระบุไว้ในคำตอบของฉันเป็นตัวเลือกอื่น แต่ฉันเป็นคนที่คลั่งไคล้และฉันไม่ได้ใช้การแก้ไขบรรทัดคำสั่งแบบ vi ...
voretaq7

4

MDMarra ให้วิธีที่ง่าย ( history|grepและคัดลอก / วางโดยใช้สภาพแวดล้อมเดสก์ท็อปของคุณโดยสมมติว่าคุณมี) ฉันจะให้สิ่งที่ฉันเรียกว่ายากซึ่งจะทำงานได้ถ้าคุณไม่มีสภาพแวดล้อมเดสก์ท็อปหรือเมาส์

สมมติว่าคุณกำลังใช้ bash เป็นเชลล์:

$ set -o vi
$ ESC372k

(ตอนนี้คุณจะมีคำสั่งที่คุณรันคำสั่ง 372 ที่ผ่านมาในบรรทัดและคุณจะอยู่ในviโหมดคำสั่ง -style แก้ไขตามที่คุณต้องการหากคุณใช้ex/ vi)


น่าสนใจ ดูเหมือนว่าจะใช้งานได้หากคุณเปิดใช้งาน "set -o vi" ก่อน อาจต้องใส่ในโปรไฟล์ทุบตีหรืออะไรบางอย่าง
Matt

นั่นเป็นหนึ่งในนั้น "ฉันมักจะใช้ vi ทำไมฉันไม่ใช้ vi ผูกเพื่อแก้ไขบรรทัดในทุบตี" สิ่งที่คุณรู้ด้วยความตกใจ ใช้เวลาสักครู่เพื่อทำความคุ้นเคยจากนั้นการผูกสไตล์ emacs ที่ทุกคนใช้จะรู้สึกแปลกและไร้ประโยชน์
cjc

@Matt ใช่ - คุณต้องตั้งค่าโหมดแก้ไขเป็นvi-style edit มันควรจะทำงานทันทีที่คุณset -o viและควรทำงานให้กับประวัติทั้งหมดของคุณ (โหมดแก้ไขเป็นเพียงส่วนต่อประสานกับประวัติคำสั่งของเชลล์และสิ่งอื่น ๆ )
voretaq7

@cjc ฉันใช้ vi เป็นตัวเลือกที่เลือก แต่ฉันไม่ได้ใช้การผูกสไตล์ vi เพื่อแก้ไขบรรทัดคำสั่งของฉัน (ฉันเพิ่งรู้วิธีการทำเช่นนี้ในโหมด vi อยู่ด้านบนของหัวของฉัน แต่คนอื่น ๆ ได้โพสต์ เทียบเท่าในโหมด emacs ซึ่งอาจเป็นมิตรมากกว่า :)
voretaq7

4

วิธีที่ง่ายและรวดเร็วที่สุดในการทำสิ่งที่คุณต้องการคือการทำงาน:

!372:p

ตามด้วยEnterและ


0

คุณอยู่บนระบบเดสก์ท็อปหรือเซิร์ฟเวอร์หรือไม่?

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

ดังนั้นคุณสามารถ grep สำหรับคำสั่ง ไฮไลต์ข้อความ วางด้วยปุ่มกลางของเมาส์แล้วแก้ไข

อาจมีวิธีที่ดีกว่านี้ แต่ใช้งานได้สำหรับฉัน


0

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

fc -e vi 372 372

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