Warum macht das '!!' Verknüpfung kann den zuvor ausgeführten Befehl nicht ausführen?

14

Kürzlich habe ich an meinem Terminal getippt

username:~$ !!

und habe einen Fehler von bash bekommen :

bash: !!: command not found

Gleichzeitig ist es erfolgreich, wenn es unter Superuser ausgeführt wird.

Ich habe den PATH-Inhalt meines Benutzers untersucht und nichts Verdächtiges festgestellt:

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

Hier ist die Ausgabe von:

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

Ein weiterer:

username:~$ echo foo
foo
username:~$ !!
bash: !!: command not found
Bulat M.
quelle
2
Kommt es immer vor Was ist, wenn du rennst echo foound dann !!? Auch Sie bearbeiten Ihre Frage und die Ausgabe hinzufügen history | tailoder so. Hat Ihre Shell-Sitzung eine Vorgeschichte?
Terdon
1
Was ist Ihre Eingabesprache? Verwenden Sie Standard-Englisch oder eine andere Tastatur?
Sergiy Kolodyazhnyy
5
Ist histexpandin deinen Shell-Optionen festgelegt? Was ist die Ausgabe von echo $-?
Steeldriver
2
@muru, ... Als ehemaliger freenode #bash-Stammgast habe ich viele Zeit damit verbracht, Leuten zu raten, es zu deaktivieren, ohne von anderen Channel-Ältesten zurückgeschubst !zu werden Zusätzliches Zitieren war weitaus häufiger anzutreffen, als jemanden zu finden, der die Historienerweiterungsfunktionalität nicht in benutzerfreundlicherer Form über die Readline zur Verfügung stellen wollte.
Charles Duffy
1
@muru, ich habe es in der Mitte meiner Konfigurationsdatei deaktiviert, als ich blind .bashrc-Inhalte aus einer der vielen Beispieldateien kopiert habe, die ich im Internet gefunden habe.
Bulat M.

Antworten:

23

Die Verlaufserweiterung ist möglicherweise deaktiviert:

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

Versuchen Sie set -Hoder set -o histexpand.

muru
quelle
@ Serg set -o, oder die spezielle Variable$-
muru
OK, ich set -o | grep hist
verstehe