คำถามติดแท็ก history-expansion

5
ฉันจะสามารถ 'alias sudo !!' ได้อย่างไร?
ฉันกำลังพยายามตั้งชื่อแทนสำหรับsudo !!ใน Bash ฉันพยายามalias sbb='sudo !!'แต่มันตีความว่าเป็นตัวอักษร !!และภาพพิมพ์ sudo: !!: command not found ถ้าฉันใช้อัญประกาศคู่มันจะใช้แทนการทำซ้ำสองครั้งในสตริงของตัวเองดังนั้นจึงไม่ทำงาน มีวิธีการทำงานนี้หรือไม่? หรือชื่อแทนอื่น `

1
$ _ vs! $. อาร์กิวเมนต์สุดท้ายของคำสั่งก่อนหน้าและการเปลี่ยนเส้นทางผลลัพธ์
คำถามเกี่ยวกับตัวแปรพิเศษ เอกสารอธิบายว่า: !!:$ กำหนดอาร์กิวเมนต์สุดท้ายของคำสั่งก่อนหน้า สิ่งนี้อาจสั้นลงถึง! $ ( $_ขีดล่าง) ที่การเริ่มต้นเชลล์ตั้งค่าชื่อพา ธ สัมบูรณ์ที่ใช้เพื่อเรียกใช้เชลล์หรือเชลล์สคริปต์ที่จะดำเนินการตามที่ส่งผ่านในสภาพแวดล้อมหรือรายการอาร์กิวเมนต์ จากนั้นขยายไปยังอาร์กิวเมนต์สุดท้ายไปยังคำสั่งก่อนหน้าหลังจากการขยาย นอกจากนี้ยังกำหนดเป็นชื่อพา ธ แบบเต็มที่ใช้เพื่อเรียกใช้คำสั่งแต่ละคำสั่งที่ดำเนินการและวางไว้ในสภาพแวดล้อมที่ส่งออกไปยังคำสั่งนั้น จะต้องมีความแตกต่างบางอย่างที่ฉันไม่สามารถจับได้เพราะ: $ echo "hello" > /tmp/a.txt $ echo "!$" echo "/tmp/a.txt" /tmp/a.txt $ echo "hello" > /tmp/a.txt $ echo $_ hello อะไรคือความแตกต่าง?

5
การพิมพ์เครื่องหมายอัศเจรีย์เดียวทำอะไรใน Bash
Bash ใช้เครื่องหมายอัศเจรีย์สำหรับการขยายประวัติตามที่อธิบายในคำตอบสำหรับคำถามนี้ (เช่นsudo !!เรียกใช้บรรทัดคำสั่งก่อนหน้าด้วยsudo) อย่างไรก็ตามฉันไม่พบที่ใดก็ได้ที่อธิบายสิ่งที่เรียกใช้คำสั่งต่อไปนี้ (เช่นเครื่องหมายอัศเจรีย์): ! ดูเหมือนว่าจะพิมพ์อะไรและออกด้วย 1 แต่ฉันไม่แน่ใจว่าทำไมมันถึงทำอย่างนั้น ฉันดูออนไลน์และในหน้า Bash man แต่ไม่พบอะไรเลยนอกจากความจริงที่ว่ามันเป็น "คำสงวน" - แต่เป็นเช่นนั้น}และใช้งานสิ่งนี้: } พิมพ์ข้อผิดพลาด: bash: syntax error near unexpected token `}'

4
ทำไมการทดแทนประวัติทุบตียังเปิดใช้งานโดยค่าเริ่มต้น [ปิด]
ปิด คำถามนี้เป็นคำถามความคิดเห็นตาม ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้สามารถตอบข้อเท็จจริงและการอ้างอิงได้โดยแก้ไขโพสต์นี้ ปิดเมื่อปีที่แล้ว ไม่มีใครรู้ว่าทำไมทุบตียังคงมีการเปิดใช้งานการทดแทนประวัติโดยค่าเริ่มต้น? ฉัน.bashrcรวมset +Hมาหลายปีแล้ว แต่คนอื่นบางคนยังคงถูกกัดโดยคุณลักษณะนี้ เมื่อพิจารณาว่าทุกคนใช้เทอร์มินัลพร้อมคุณสมบัติคัดลอกวางและทุบตีคอมไพล์ด้วยการแทนที่readlineไลบรารีและประวัติถูกเปิดใช้งานโดยค่าเริ่มต้นในเชลล์แบบโต้ตอบเท่านั้นมีเหตุผลใด ๆ ที่มีคุณสมบัตินี้หรือไม่ ไม่มีสคริปต์ใด ๆ ที่มีอยู่จะใช้งานไม่ได้แม้ว่าจะถูกปิดใช้งานโดยค่าเริ่มต้นสำหรับเชลล์ทั้งหมด ลองใช้วิธีนี้หากคุณไม่ทราบว่าทำไมการทดแทนประวัติเสีย: $ set +H # disable feature history substitution $ echo "WTF???!?!!?" WTF???!?!!? $ set -H # enable feature history substitution $ echo "WTF???!?!!?" echo WTF???echo WTF???!?!!? WTF???echo WTF???!?!!? (เห็นได้ชัดว่าสถานที่มีปัญหาที่สำคัญถ้ามันถูกปิดใช้งานโดยค่าเริ่มต้นสำหรับการเขียนสคริปต์ทั้งหมดและมีคุณสมบัติที่มีอยู่เพื่อตรวจสอบผลลัพธ์ก่อนที่จะดำเนินการ: shopt -s histverify.) ดูสิ่งนี้ด้วย: …

5
วิธีการจำคำสั่งก่อนหน้า (โดยไม่มีการดำเนินการ) เพื่อเปลี่ยนคำสั่ง?
ฉันจำเคล็ดลับที่ฉันไม่สามารถเรียกใช้คำสั่งล่าสุดโดยไม่เรียกใช้: สมมติว่าฉันต้องการที่จะสามารถเข้าถึงคำสั่งได้! 1255 เมื่อกดปุ่มลูกศรขึ้นและแก้ไขคำสั่ง ดังนั้นเคล็ดลับในการเรียกคำสั่งทำให้มันปรากฏขึ้นในบรรทัดคำสั่ง แต่ไม่ได้ดำเนินการและหลังจากนั้นสามารถเข้าถึงได้ผ่านทางปุ่มลูกศรขึ้น? ฉันพยายามใส่เสียงก้อง แต่จากนั้นฉันก็มีเสียงก้องต่อคำสั่งฉันจำไม่ได้ว่าทำอย่างถูกต้อง

2
วิธีการเข้าถึงอาร์กิวเมนต์ที่สองจากคำสั่งสุดท้ายในประวัติศาสตร์?
ฉันเริ่มเรียนรู้ Regex บางอย่างดังนั้นฉันใช้คำสั่งนี้ซ้ำ ๆ : grep pattern /usr/share/dict/american-english เฉพาะส่วนที่มีการเปลี่ยนแปลงรูปแบบดังนั้นฉันต้องเขียนนิพจน์แบบยาว " / usr / share / dict / american-english " ซ้ำแล้วซ้ำอีก ใครบางคนทำข้อสังเกตว่ามันเป็นไปได้ที่จะขยายการโต้แย้งของคำสั่งจากประวัติคำสั่งโดยการพิมพ์ชุดอักขระที่เป็นความลับแทนการแสดงออกเต็มรูปแบบ คุณช่วยบอกชุดอักขระที่เป็นความลับเหล่านั้นให้ฉันได้ไหม
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.