У меня есть следующее:
[root@alexandra SCB]# cat test_exit.sh
#!/usr/bin/ksh
if [[ -e "test_exit.sh" ]]; then
echo "No existential crisis here"
fake_command
if [[ $? -ne 0 ]] ; then
echo "You can't run fake commands"
exit 256
fi
else
echo "WTF?"
fi
[root@alexandra SCB]# ./test_exit.sh
No existential crisis here
./test_exit.sh[7]: fake_command: not found [No such file or directory]
You can't run fake commands
[root@alexandra SCB]# echo $?
0
Я ожидаю, что я должен получить 256
, а не 0
.
Я, кажется, вспоминаю, что где-то читал, что if
условный в KornShell порождает дочерний процесс.Сначала я думал, что это может быть проблемой, но даже это не объясняет этого.Если моя память об этом верна, процесс for
завершится с $? == 256
.Все другие выходы будут неявными exit $?
, и это будет распространять значение 256 вплоть до исходной оболочки.
Может кто-нибудь объяснить, почему я не вижу 256, которое я ожидаю увидеть?