195 votos

¿Qué es "-bash:!": evento no encontrado "

Intentar ejecutar lo siguiente en una shell bashecho "Reboot your instance!"

En mi instalación:

root@domU-12-31-39-04-11-83:/usr/local/bin# bash --version
GNU bash, version 4.1.5(1)-release (i686-pc-linux-gnu)
Copyright (C) 2009 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>

This is free software; you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
root@domU-12-31-39-04-11-83:/usr/local/bin# uname -a
Linux domU-12-31-39-04-11-83 2.6.35-22-virtual #35-Ubuntu SMP Sat Oct 16 23:57:40 UTC 2010 i686 GNU/Linux
root@domU-12-31-39-04-11-83:/usr/local/bin# echo "Reboot your instance!"
-bash: !": event not found

Puede alguien por favor explicar qué es "fiesta eventos?" Nunca he oído este concepto antes. Además, ¿cómo debería salida "!" al final de la oración?

165voto

MadHatter Puntos 44059

! es un carácter especial a bash, se usa para referirse a los comandos anteriores; por ejemplo,

!rm

recuerden y ejecutar el último comando que se inició con la cadena "rm", y

!rm:p

se recuerdan, pero no ejecutar el último comando que se inició con la cadena "rm". bash es interpretar el signo de exclamación en echo "reboot your instance!" como "sustituto aquí el último comando que comenzó con el personaje(s) inmediatamente después del signo de exclamación", y se queja, en la que no puede encontrar un evento (comando) en su historia, que comenzó con un solo doble cita.

Trate de

echo reboot your instance\!

para proteger (escape) el signo de exclamación de bash.

124voto

jason saldo Puntos 5036

Puede desactivar la historia sustitución utilizando set +H .

38voto

SmallClanger Puntos 6536

Para resolver el problema original, trate de usar comillas simples, en lugar de las comillas dobles. Con el último, bash intentará expandir ciertos caracteres antes de pasar el resultado en el comando (de echo en este caso). Con comillas simples, bash pasa toda la cadena, sin cambios.

! se utiliza en los comandos para referirse a la línea de comandos de la historia. Ver: http://tldp.org/LDP/abs/html/abs-guide.html#HISTCOMMANDS un conjunto completo. Con el ejemplo anterior, bash está tratando de expandir !" como una referencia a un evento antes de que el eco se presenta una mirada en el, por eso el error.

Tenga en cuenta que en los guiones, todos de la historia de los comandos están desactivadas, ya que sólo tienen sentido en un shell interactivo.

El único que tengo en una base regular, es !$. Se amplía hasta el último argumento de que el comando anterior. Es un útil de taquigrafía en los lugares.

10voto

Isik Mater Puntos 1

Acabo de poner un espacio entre! y "de lo que trabajaremos.

Salud.

7voto

Syed Qaiser Puntos 11

¡ Sí! es un carácter especial a bash, se utiliza para referirse a los comandos anteriores.

Algunas de las maneras en que puedes manejar la situación

A continuación emite la cadena como es

echo 'Reboot your instance!'

A continuación se ejecute el comando y concatenar la cadena

echo 'escaping #'" adding `which python` to the string"
echo '#!'`which python`

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X