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