ทำไม '!!' ช็อตคัทล้มเหลวในการเรียกใช้คำสั่งที่รันก่อนหน้า


14

เมื่อเร็ว ๆ นี้ฉันพิมพ์ที่เทอร์มินัลของฉัน

username:~$ !!

และได้รับข้อผิดพลาดจากทุบตี :

bash: !!: command not found

ในเวลาเดียวกันมันจะประสบความสำเร็จเมื่อทำภายใต้ superuser

ฉันตรวจสอบเนื้อหาของ PATH ของผู้ใช้และไม่พบสิ่งที่น่าสงสัย:

/home/username/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin

นี่คือผลลัพธ์ของ:

username:~$ history | tail
1993  date
1994  cal
1995  vcal
1996  uptime
1997  uname
1998  uptime
1999  uname
2000  uptime
2001  uname
2002  history | tail

อื่น ๆ :

username:~$ echo foo
foo
username:~$ !!
bash: !!: command not found

2
มันเกิดขึ้นเสมอหรือไม่ เกิดอะไรขึ้นถ้าคุณเรียกใช้echo fooแล้ว!!? นอกจากนี้โปรดแก้ไขคำถามของคุณและเพิ่มผลลัพธ์history | tailหรือมากกว่านั้น เชลล์เซสชันของคุณมีประวัติใด ๆ หรือไม่?
terdon

1
ภาษาที่คุณป้อนคืออะไร? คุณใช้ภาษาอังกฤษมาตรฐานหรือแป้นพิมพ์อื่น ๆ
Sergiy Kolodyazhnyy

5
เป็นที่histexpandตั้งอยู่ในตัวเลือกเปลือกของคุณหรือไม่ ผลลัพธ์ของecho $-อะไร
ขับเหล็ก

2
@muru, ... พูดถึงอดีต freenode #bash เป็นประจำฉันเคยใช้เวลามากในการให้คำแนะนำแก่คนที่จะปิดการใช้งานโดยไม่ได้รับการย้อนกลับจากผู้สูงอายุช่องอื่น ๆ - ผู้คนประหลาดใจกับคำสั่งที่!ไม่ได้รับเกียรติ การอ้างพิเศษเป็นสิ่งที่เกิดขึ้นได้บ่อยกว่าการหาคนที่ต้องการฟังก์ชั่นการขยายประวัติที่ไม่มีในรูปแบบที่ง่ายต่อการใช้งานผ่าน readline
Charles Duffy

1
@muru ฉันปิดการใช้งานตรงกลางไฟล์กำหนดค่าของฉันเมื่อคัดลอกเนื้อหา. bashrc จากไฟล์ตัวอย่างที่ฉันพบบนอินเทอร์เน็ต
Bulat M.

คำตอบ:


23

การขยายประวัติอาจถูกปิดใช้งาน:

$ echo foo
foo
$ !!
echo foo
foo
$ set +o histexpand
$ set -o | grep hist
histexpand      off
history         on
$ echo foo
foo
$ !!
bash: !!: command not found

ลองหรือset -Hset -o histexpand


@Serg set -oหรือตัวแปรพิเศษ$-
muru

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