เทอร์มินัลแทน! ตามด้วยหมายเลขด้วยคำสั่ง


12

ฉันสับสนมากเกี่ยวกับเซสชันเทอร์มินัล Ubuntu ของฉันดูเหมือนว่าจะแทนที่ส่วนในคำสั่งที่เริ่มต้น!ตามด้วยหมายเลขด้วยคำสั่งแบบสุ่มที่ดูเหมือนว่า มันไม่ได้ว่ามีการ!87แทนที่ด้วยscreen -lและยังมีและแทนที่ด้วย!88ls

ความคิดเห็นใด ๆ ที่ทำให้เกิดเหตุการณ์นี้ขึ้น


คำตอบ:


20

นั่นเป็นการbashขยายประวัติศาสตร์เช่น

!87

87อีกรันคำสั่งจากบรรทัดประวัติศาสตร์

คุณจะพบคำอธิบายของฟีเจอร์นี้ในman bashหัวข้อ“ การขยายประวัติศาสตร์”:

       An  event  designator  is  a  reference  to a command line entry in the
       history list.  Unless the reference is absolute, events are relative to
       the current position in the history list.

       !      Start  a  history substitution, except when followed by a blank,
              newline, carriage return, = or ( (when the extglob shell  option
              is enabled using the shopt builtin).
       !n     Refer to command line n.
       !-n    Refer to the current command minus n.

ดังนั้นเพื่อให้ได้อย่างรวดเร็วเรียกคำสั่งสุดท้ายให้ทำและเป็นคำสั่งสุดท้ายที่ห้า!-1 !-5คำพ้องความหมายที่มีประโยชน์!-1คือ!!ถ้าคุณเรียกเช่นapt install somethingและลืมsudoเพียงแค่ดำเนินการsudo !!และคุณจะดี

เครื่องหมายแบ็กสแลช ( \ ) และเครื่องหมายคำพูดเดียวเท่านั้นที่สามารถอ้างถึงอักขระส่วนขยายประวัติ

เพื่อหลีกเลี่ยงการขยายประวัติคุณต้องหลีกเลี่ยงเครื่องหมายอัศเจรีย์ด้วยเครื่องหมายทับขวา ( \!) หรือใช้เครื่องหมายคำพูดเดี่ยว ( '!')


3
ที่จะผ่าน litereal !คำสั่งและการขยายตัวประวัติศาสตร์หลีกเลี่ยงของคุณคุณจะต้องอ้างเดียวหรือหลบหนีพวกเขา หรือfoo '!87' foo \!87(ราคาสองครั้งนอกจากนี้ยังจะดำเนินการขยายตัวอยู่กับเนื้อหาของพวกเขา.)
เพ้อฝัน
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.