Existe um comando padrão que sempre sai com uma falha?


42

Quero testar meu script com um comando que falha. Eu poderia usar um comando existente com argumentos ruins. Eu também poderia escrever um script simples que saia imediatamente com uma falha. Ambos são fáceis de fazer e funcionam para mim, mas se houver um comando padrão para esse fim, eu gostaria de usá-lo.


false, mas também qualquer comando inexistente.
Kusalananda

Respostas:


51

Você pode usar false( /bin/false, /usr/bin/falseou shell builtin):

$ false || echo It failed.
It failed.
$

Você também pode usar exit 1de um subshell:

$ (exit 1) || echo Gosh, it failed too.
Gosh, it failed too.
$

Além disso, você pode chamar de maneira portável a saída com qualquer número no intervalo de 1 a 255, inclusive. (A maioria dos shells aplicará uma operação do módulo 255 em quaisquer outros números dados para sair, portanto, na prática, você pode se safar com outros números, embora eles sejam coagidos no intervalo acima mencionado. Mas alguns shells farão outras coisas, por exemplo, sair com um erro de sintaxe (embora ainda seja um status de falha) se chamado com um valor negativo.Os sistemas do tipo Unix suportam apenas códigos de saída no intervalo de 0 a 255, inclusive, e é por isso que você não pode confiar em um comportamento bem definido para outros valores, para sair em todas as conchas).
mtraceur

1
E, como um pouco de trivialidade, a menos que você precise de portabilidade para shells realmente antigos / obscuros, você também pode fazer ! :(ou qualquer outro comando que normalmente retorne sucesso). !diz para negar o status de saída do comando a seguir. :é apenas o comando noop builtin que sempre sai com sucesso. (Apenas certifique-se de deixar um espaço após o !comando e antes que o comando seja negado; caso contrário, ele tentará analisá-lo como um comando começando com um !caractere - ou, no caso de shells como bashno modo interativo, ele será analisado como um dos esses modificadores de história especiais).
mtraceur
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.