Dlaczego „!!” skrót nie może wykonać poprzednio uruchomionego polecenia?

14

Ostatnio pisałem na terminalu

username:~$ !!

i dostałem błąd z bash :

bash: !!: command not found

W tym samym czasie udaje się to, gdy jest wykonywane pod nadzorem administratora.

Sprawdziłem zawartość PATH mojego użytkownika i nie znalazłem niczego podejrzanego:

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

Oto wynik:

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

Inne:

username:~$ echo foo
foo
username:~$ !!
bash: !!: command not found
Bulat M.
źródło
2
Czy to się zawsze zdarza? Co jeśli uciekniesz, echo fooa potem !!? Także, proszę edytować swoje pytanie i dodać wyjściu history | taillub tak. Czy twoja sesja powłoki ma jakąś historię?
terdon
1
Jaki jest twój język wprowadzania? Czy używasz standardowej angielskiej lub innej klawiatury?
Sergiy Kolodyazhnyy
5
Czy jest histexpandustawiony w opcjach powłoki? Jaka jest wydajność echo $-?
steeldriver,
2
@muru, ... mówiąc jako były freenode #bash regularnie, spędzałem dużo czasu doradzając ludziom, aby go wyłączali, nie otrzymując żadnych odrzutów od innych starszych kanałów - ludzie byli zaskoczeni rozkazami, a !literały nie były honorowane bez dodatkowe cytowanie było znacznie częstszym zjawiskiem niż znalezienie kogoś, kto chciałby, aby funkcja rozszerzenia historii nie była dostępna w łatwiejszej w użyciu formie poprzez readline.
Charles Duffy,
1
@muru, wyłączyłem go w środku mojego pliku konfiguracyjnego, gdy ślepo kopiowałem zawartość .bashrc z jednego z wielu przykładowych plików, które znalazłem w Internecie.
Bulat M.,

Odpowiedzi:

23

Rozszerzanie historii może być wyłączone:

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

Spróbuj set -Hlub set -o histexpand.

muru
źródło
@Serg set -o, lub zmienna specjalna$-
muru,
OK, rozumiem, z tym właśnie robiszset -o | grep hist
Sergiy Kolodyazhnyy,