195 votes

Qu'est-ce que "-bash : !" : event not found" ?

Essayez d'exécuter ce qui suit sous un Shell bash echo "Reboot your instance!"

Sur mon installation :

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

Quelqu'un peut-il m'expliquer ce que sont les "événements bash" ? Je n'ai jamais entendu ce concept auparavant. De plus, comment dois-je écrire " !" à la fin de la phrase ?

5voto

Roel Van de Paar Points 237

Vous pouvez également ajouter

histchars=  

Unter ./bash_profile (ou l'utiliser en une seule fois sur la ligne de commande)

Pour désactiver ! d'être un "personnage historique spécial", ou de le définir comme autre chose.

Avertissement ; certaines choses peuvent se briser lorsque vous le réglez par exemple sur ~ et éventuellement d'autres chaînes.

Regardez :

$ echo "!test"
-bash: !test: event not found
$ histchars=
$ echo "!test"
!test
$ histchars=7
$ echo "7test"
-bash: 7test: event not found
$ histchars=
$ histchars=~
$ histchars=
hars=hars=~     # odd output
$ ~/test
-bash: /test: event not found

2voto

jojo Points 1105

Vous pouvez également utiliser un heredoc :

cat <<EOF
Reboot your instance!
EOF

C'est ennuyeux dans ce cas parce que ce n'est pas un one-liner mais pour des commandes plus longues (comme écrire un bash script), ça marche très bien.

1voto

Eugene Yarmash Points 2363

Unter bash 4.3 il semble que vous ne devez plus utiliser de guillemets simples ou de set +H :

$ bash --version
GNU bash, version 4.3.46(1)-release (x86_64-unknown-linux-gnu)
[...]
$ echo "Reboot your instance!"
Reboot your instance!

0voto

Scott Points 9

! est un caractère spécial pour zsh. Il pointe vers la commande précédente.
Si vous avez besoin de l'utiliser comme caractère de chaîne, essayez \!

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X