код выхода 128, в чем причина?

9884
P K

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

2 ответа на вопрос

4
Darren Hall

В документации 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 
1
kubanczyk

Это зависит от вашего варианта оболочки. Этот 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 (но на самом деле также не завершается).

За исключением нескольких кодов выхода, коды выхода не стандартизированы. Также 0 означает успех,> 0 означает какой-то сбой. fpmurphy1 12 лет назад 1

Похожие вопросы