Para que o script saia imediatamente após o erro, execute o script com bash -e /tmp/foo.sh
ou coloque esta linha no início do script: set -e
.
-e
ou errexit
diz ao bash para sair do script imediatamente se ocorrer um "erro". Note que errexit
é um pouco mais complicado do que isso e nem sempre faz o que você espera. Leia isto para mais informações: link ("Por que não definir -e (ou set -o errexit, ou ERR armadilha fazer o que eu esperava? ")
O recurso de manipulação de comando não encontrado não está (normalmente) habilitado dentro de um script bash. Isso ocorre porque um script bash não lê bashrc e o command_not_found_handle
é (geralmente) definido em algum bashrc (no debian é /etc/bash.bashrc
).
Se você realmente quiser ter certeza de que o recurso de manipulação de comando não encontrado está desabilitado no seu script, você pode indefinir a função assim:
if [ x"$(type -t command_not_found_handle)" = x"function" ]; then
unset -f command_not_found_handle
fi
Se você fizer isso dentro de um script bash e você executar o script, em vez de sourcing , então command_not_found_handle
será apenas indefinido dentro do script bash. O estado de command_not_found_handle
em seu shell interativo permanecerá em qualquer estado antes de executar o script.
Leia isto para mais informações: link
E como você está usando eval
, leia também: link ("Eval command and security issues")