Tente executar o seguinte em um shell bash echo "Reboot your instance!"
Na minha instalação:
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
Alguém por favor pode explicar o que é "eventos de festa"? Eu nunca ouvi esse conceito antes. Além disso, como devo gerar "!" no final da frase?
+H
para ativar e-H
desativar algo.+
são simplesmente o oposto disso.!
é um caractere especial para bash, é usado para se referir a comandos anteriores; por exemplo,irá chamar e executar o último comando que começou com a cadeia "rm" e
lembrará, mas não executará o último comando iniciado com a string "rm". bash está interpretando o ponto de exclamação
echo "reboot your instance!"
como " substitua aqui o último comando que começou com o (s) caractere (s) imediatamente após o ponto de exclamação " e resmunga que não consegue encontrar um evento (comando) no seu histórico que comece com um único citação dupla.Experimentar
para proteger (escapar) o ponto de exclamação do bash.
fonte
Para resolver seu problema original, tente usar aspas simples, em vez de aspas duplas. Com o último, o bash tentará expandir certos caracteres antes de passar o resultado para o comando (eco neste caso). Com aspas simples, o bash passa a cadeia inteira, inalterada.
!
é usado em comandos para se referir ao histórico da linha de comandos. Consulte: http://tldp.org/LDP/abs/html/abs-guide.html#HISTCOMMANDS para obter um conjunto completo. Com o exemplo acima, o bash está tentando expandir!"
como uma referência a um evento antes que o eco seja visto, daí o erro.Observe que nos scripts, todos os comandos do histórico estão desativados, pois só fazem sentido em um shell interativo.
O único que eu uso regularmente é
!$
. Ele se expande para o último argumento do comando anterior. É uma abreviação útil em alguns lugares.fonte
!!
preencher o último comando completo digitado é notavelmente útil; particularmente,sudo !!
oupfexec !!
$_
funciona em mais conchas do que bash e é uma variável adequada, ao contrário!$
. (e @LeartS: gostei da falta de emoticons da sua piadaBasta colocar um espaço no meio! e "do que vai funcionar.
Felicidades.
fonte
Sim, ! é um caractere especial para bash, é usado para se referir a comandos anteriores.
Poucas maneiras de lidar com a situação
A seguir, será exibida a string como está
A seguir, o comando será executado e concatenado a sequência
fonte
Em
bash 4.3
parece que você não precisa mais usar aspas simples ouset +H
:fonte
set +H
ou citar. Ou você temset +H
algum lugar (como em/etc/profile
).Você também pode usar um heredoc :
É irritante neste caso, porque não é uma linha, mas para comandos mais longos (como escrever um script bash), funciona muito bem.
fonte