Код выхода 128, в чем причина?
Согласно определению код выхода 128 означает "недопустимый аргумент выхода". Но я всегда получаю 255 (статус выхода вне диапазона) в случае, если аргумент недопустим, как число с плавающей запятой.
Это проприетарная реализация в моем дистрибутиве Linux?
# exit 1.234
exit
bash: exit: 1.234: numeric argument required
$ echo $?
255 //this should be 128?
# exit -1
exit
$ echo $?
255 //this is okay
2 ответа
В документации Bash нет ничего, что гласит 128
является обязательным неверным кодом выхода.
Сам Bash возвращает состояние завершения последней выполненной команды, если только не произойдет синтаксическая ошибка, и в этом случае он завершается с ненулевым значением.
Последняя команда - встроенная команда bash. exit
(со страницы руководства)
выход [n]
Заставить оболочку выйти со статусом n. Если n опущено, статус выхода соответствует статусу последней выполненной команды.
Проверенная спецификация для WEXITSTATUS.
WEXITSTATUS (stat_val)
Если значение WIFEXITED(stat_val) не равно нулю, этот макрос оценивается как младшие 8 битов аргумента состояния, которые дочерний процесс передал в _exit() или exit(), или значение, которое дочерний процесс возвратил из main().
Таким образом, выход ограничен 8-битным целым числом ( 0 - 255), поэтому -1
было бы 255
, Exit понимает только целочисленный аргумент, а не с плавающей точкой, так что, скорее всего, он выбрасывает значение по умолчанию -1
,
bash$ echo $BASH_VERSION
4.1.10(4)-release
bash$ exit foo
exit
bash: exit: foo: numeric argument required
$ echo $?
255
bash$ exit 2
exit
$ echo $?
2
bash$ exit -2
exit
$ echo $?
254
Это зависит от вашего варианта оболочки. Этот http://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html или http://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html не подтверждает, что вы 128 - это специальный код выхода.
За exit 3.45
мои версии ksh и zsh возвращают 3, tcsh возвращает 1 (на самом деле не завершается), а ash возвращает 2 (но на самом деле также не завершается).