I have the following:
[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
My expectation is that I should get 256, not 0.
I seem to recall reading somewhere that an if conditional in KornShell spawns a child process. At first, I thought that could be the problem, but even that does not explain it. If my memory about that is correct, the for process would exit with $? == 256. All other exits would be an implicit exit $? and this would propagate the value of 256 all the way back to the original shell.
Can anyone explain why I am not seeing the 256 that I am expecting to see?
That is because 256 exceed the total number allowed for a 8 bits value. If you use 255 it would work.
256 == 0 modulo 256 as 2^8 = 256