¿Por qué el '!!' acceso directo no puede ejecutar el comando ejecutado anteriormente?

14

Recientemente escribí en mi terminal

username:~$ !!

y recibí un error de bash :

bash: !!: command not found

Al mismo tiempo, tiene éxito cuando se realiza bajo superusuario.

Investigué el contenido de la RUTA de mi usuario y no encontré nada sospechoso:

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

Aquí está la salida de:

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

Otro:

username:~$ echo foo
foo
username:~$ !!
bash: !!: command not found
Bulat M.
fuente
2
¿Siempre pasa? ¿Qué pasa si corres echo fooy luego !!? Además, edite su pregunta y agregue el resultado de más history | tailo menos. ¿Tu sesión de shell tiene algún historial?
terdon
1
¿Cuál es su idioma de entrada? ¿Estás usando el inglés estándar o algún otro teclado?
Sergiy Kolodyazhnyy
55
¿Está histexpandconfigurado en sus opciones de shell? ¿Cuál es la salida de echo $-?
steeldriver
2
@muru, ... hablando como un antiguo freenode #bash regular, solía pasar mucho tiempo aconsejando a la gente que lo deshabilitara, sin recibir ningún rechazo de otros ancianos del canal: la gente se sorprendió por comandos con !literales que no fueron honrados sin Las citas adicionales eran mucho más comunes que encontrar a alguien que quisiera que la funcionalidad de expansión del historial no estuviera disponible en una forma más fácil de usar a través de readline.
Charles Duffy
1
@muru, lo deshabilité en el medio de mi archivo de configuración cuando estaba copiando ciegamente el contenido .bashrc de uno de los muchos archivos de ejemplo que encontré en Internet.
Bulat M.

Respuestas:

23

La expansión del historial podría estar deshabilitada:

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

Prueba set -Ho set -o histexpand.

muru
fuente
@Serg set -o, o la variable especial$-
muru
Bien, ya veo, eso es lo que estás haciendoset -o | grep hist
Sergiy Kolodyazhnyy