Eu uso um sistema em que os scripts utilizam set -e
:
#!/bin/sh
set -e
echo 1
true
echo 2
true
echo 3
false
echo notreached
Se eu fizer isso:
#!/bin/sh
set -e
echo 1
true
echo 2
true
echo 3
! false
echo reached
...a última linha é alcançada. No entanto, se eu fizer isso:
#!/bin/sh
set -e
echo 1
true
echo 2
true
echo 3
! true
echo reached
...a última linha é alcançada, embora ! true
devesse ser false
.
Mais testes:
user@linux:~$ ! false && echo ok
ok
user@linux:~$ ! true && echo ok
user@linux:~$
...então nestes casos, o !
operador funciona corretamente.
No entanto, ele não funciona corretamente com set -e
. Por quê?
Relacionado: http://mywiki.wooledge.org/BashFAQ/105 ...embora isso não responda minha pergunta.