¿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

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.


@Serg set -o, o la variable especial$-
— muru

Bien, ya veo, eso es lo que estás haciendoset -o | grep hist
— Sergiy Kolodyazhnyy
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.