Perché il '!!' collegamento non riesce a eseguire il comando precedentemente eseguito?


14

Di recente ho digitato sul mio terminale

username:~$ !!

e ho ricevuto un errore da bash :

bash: !!: command not found

Allo stesso tempo, ha successo quando fatto sotto il superutente.

Ho studiato il contenuto del mio percorso dell'utente e non ho trovato nulla di sospetto:

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

Ecco l'output di:

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

Un altro:

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

2
Succede sempre? E se corri echo fooe poi !!? Inoltre, modifica la domanda e aggiungi l'output di history | tailcirca. La tua sessione di shell ha una storia?
terdon,

1
Qual è la tua lingua di input? Stai usando l'inglese standard o un'altra tastiera?
Sergiy Kolodyazhnyy,

5
È histexpandimpostato nelle opzioni della shell? Qual è l'output di echo $-?
steeldriver,

2
@muru, ... parlando come un ex #bash regolare di freenode, passavo molto tempo a consigliare alle persone di disabilitarlo, senza ottenere alcun respingimento da altri anziani del canale - le persone sono sorprese da comandi con !valori letterali senza essere onorati senza la citazione extra era un evento molto più comune rispetto alla ricerca di qualcuno che desiderasse che la funzionalità di espansione della cronologia non fosse disponibile in forma più facile da usare attraverso readline.
Charles Duffy,

1
@muru, l'ho disabilitato nel mezzo del mio file di configurazione quando stavo copiando ciecamente il contenuto .bashrc da uno dei molti file di esempio che ho trovato su Internet.
Bulat M.

Risposte:


23

L'espansione della cronologia potrebbe essere disabilitata:

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

Prova set -Ho set -o histexpand.


@Serg set -o, o la variabile speciale$-
muru

OK, capisco, è quello che stai facendoset -o | grep hist
Sergiy Kolodyazhnyy,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.