ฉันสามารถใช้ '!!' ในนามแฝงหรือสคริปต์?


10

ใน Terminal ฉันสามารถใช้!!ซึ่งจะอ้างอิงคำสั่งก่อนหน้าของฉัน
เป็นไปได้ไหมที่จะใช้สิ่งนี้ในนามแฝง? ฉันลองแล้ว แต่สิ่งที่เกิดขึ้นคือเครื่องหมายอัศเจรีย์คู่ถูกตีความตามตัวอักษรอย่างแท้จริง

สิ่งที่ฉันต้องการมีความเป็นไปได้คือ:

  1. ฉันป้อนคำสั่งบางอย่าง
  2. ฉันพิมพ์นามแฝงที่จะรวมสิ่งที่ป้อนในขั้นตอนที่ 1

หากมีวิธีการใช้สคริปต์ที่ยอมรับได้เช่นกัน


เป้าหมายหลักของคุณคืออะไร เพิ่มตัวเลือกเพิ่มเติมในคำสั่งสุดท้าย?
Sergiy Kolodyazhnyy

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

ดูเหมือนว่าคุณต้องการเพียงแค่fcคำสั่งเพื่อเปิด text editor เพราะนั่นเป็นวิธีที่ง่ายที่สุดในการแก้ไขคำสั่งแบบยาว ให้ฉันเพิ่มลงในโพสต์ของฉัน นอกจากนี้บางทีคุณอาจให้ตัวอย่างคำสั่ง?
Sergiy Kolodyazhnyy

เพิ่มการแก้ไขในโพสต์ของฉัน
Sergiy Kolodyazhnyy

คำตอบ:


11

fc -nl -1คำสั่งที่แสดงรายการคำสั่งดำเนินการสุดท้ายคือ การใช้การทดแทนผลลัพธ์เราสามารถเพิ่มพารามิเตอร์เพิ่มเติมลงในเนื้อหาเดียวกันได้

$> ls /etc/passwd
/etc/passwd
$> $(fc -nl -1)  /etc/group                                                     
/etc/group  /etc/passwd
$> 

อย่างไรก็ตามการอ้างอิงอาจมีปัญหากับวิธีนี้

คุณลักษณะที่ดีมากของfcคือถ้าคุณเพียงแค่เรียกใช้fcคำสั่งด้วยตัวเองมันจะเปิดโปรแกรมแก้ไขข้อความที่ระบุในFCEDITตัวแปร (ซึ่งคุณอาจต้องการเก็บไว้ใน~/.bashrc) และเนื้อหาของบรรทัดจะเป็นคำสั่งสุดท้ายของคุณ เพื่อความสะดวกของคุณฉันขอแนะนำให้คุณใช้nanoเป็นตัวแก้ไขข้อความของคุณ แต่ถ้าคุณรู้vim - ดียิ่งขึ้น

ตัวอย่างเช่นถ้าฉันต้องแก้ไขqdbus org.ayatana.bamf /org/ayatana/bamf/matcher org.ayatana.bamf.matcher.ActiveWindowบรรทัดที่มีขนาดใหญ่ใช่มั้ย แต่ด้วยfcฉันสามารถเปิดvimและแก้ไข/org/ayatana/bamf/matcherบันทึกออกและมันจะทำงาน


9

คุณไม่สามารถใช้!!แต่ ...

จากคู่มือ :

นามแฝงที่มีประโยชน์ที่จะใช้กับคำสั่ง fc คือการr='fc -s'พิมพ์ 'r cc' เพื่อรันคำสั่งสุดท้ายที่เริ่มต้นด้วย cc และพิมพ์ 'r' อีกครั้งเพื่อเรียกใช้งานคำสั่งสุดท้าย


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

8

หากคุณยืนยันที่จะใช้!!ไวยากรณ์ส่วนขยายประวัติแทนfc(กล่าวถึงแล้ว) จะมีวิธี

โดยค่าเริ่มต้นhistoryการขยายตัวจะถูกปิดการใช้งานสำหรับเซสชันเชลล์ที่ไม่มีการโต้ตอบเช่นในสคริปต์

หากต้องการเปิดใช้งานการขยายประวัติในสคริปต์ให้เปิดใช้งานตัวเลือกเชลล์ที่เกี่ยวข้องก่อน:

set -o history 
set -o histexpand

set -o histexpandสามารถเขียนได้เช่นset -Hกัน

ตอนนี้การดำเนินการขยายประวัติเช่น!!จะทำงานภายในสคริปต์

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