3

Согласно определению код выхода 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 ответа2

5

В документации Bash нет ничего, что гласит, что 128 - это неверный код выхода.

Сам Bash возвращает состояние завершения последней выполненной команды, если только не произойдет синтаксическая ошибка, и в этом случае он завершается с ненулевым значением.

Последняя команда - встроенный exit bash (с man-страницы)

выход [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
1

Это зависит от вашего варианта оболочки. Этот http://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_08 или http://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#exit не подтверждает, что вы 128 - это специальный код выхода.

Для exit 3.45 мои версии ksh и zsh возвращают 3, tcsh возвращает 1 (фактически не завершается), а ash возвращает 2 (но также фактически не завершается).

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .