Как мне установить код выхода из условной оболочки? - PullRequest
1 голос
/ 16 марта 2011

У меня есть следующее:

[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, которое я ожидаю увидеть?

Ответы [ 2 ]

3 голосов
/ 16 марта 2011

Это потому, что 256 превышают общее количество, разрешенное для 8-битного значения. Если вы используете 255, это будет работать.

256 == 0 по модулю 256 как 2 ^ 8 = 256

2 голосов
/ 20 марта 2011

Примечание: Рекомендуется ограничить коды выхода до 1..127, чтобы оставаться совместимым с «wait».

Команда ожидания вернет младшие 7 битов статуса последнегофоновый процесс для завершения.Значения свыше 128 используются для обозначения номера сигнала, который убил другой процесс.

...