2015-10-14 2 views
5

Я пишу довольно тривиальный сценарий bash; если я обнаружил ошибку (не с плохим статусом выхода из какого-либо другого процесса), я хочу выйти из состояния выхода, указывающего на ошибку (не будучи слишком конкретным).Почему некоторые люди выходят из -1, а не выходят на ошибку 1?

Кажется, что я должен делать exit 1 (например, в соответствии с the TLDP Advanced Bash Scripting Guide и заголовком stdlib.h стандартной библиотеки C); но я замечаю много людей exit -1. Почему это?

+1

Где вы видите это? – Random832

+0

@ Random832: В коде, недоступном для вас :-(, но также, я помню, что на протяжении многих лет я видел кучу выхода -1, я просто никогда не думал об этом. – einpoklum

+0

@ Random832: Еще один пример для вас - [здесь на сайте] (http://stackoverflow.com/a/18880585/1593077) – einpoklum

ответ

5

ABS TLDP имеет сомнительную достоверность (в том, что он часто использует, без комментариев, под-парные практики), поэтому я бы не воспринял это как особый бастион правильности об этом.

При этом действительные коды возврата команд находятся между 0 и 255 с 0 «успех». Так что да, 1 - это абсолютно допустимый (и общий) код ошибки.

Очевидно, я не могу точно сказать, почему другие люди это делают, но у меня есть две мысли по этой теме.

  1. Неисправность контекстного переключателя (возможно, в сочетании с недостатком знаний о домене).

    Во многих языках возвращаемое значение -1 из функции является вполне допустимым значением и выделяется из всех положительных значений, которые могут (как предполагается,) возвращаться.

    Так пытаясь расширить этот шаблон (который писатель собрал с течением времени) на сценарий оболочки/etc. для них разумная вещь. Особенно, если у них нет знаний домена, чтобы понять, что действительные коды возврата находятся между 0255.

  2. Попытка вывести эти линии выхода из строя «выделиться» из обычных случаев выхода (которые могут или не могут быть удалены сами), чтобы визуально различить определенный набор крайне маловероятных или иначе экстраординарных случаев выхода.

    Выход -1 действительно работает, он просто не дает вам код возврата -1, он получает код возврата 255. (Попробуйте (exit -1); echo $? в своей оболочке, чтобы увидеть это.) Таким образом, это не совсем необоснованная вещь, которую нужно делать (несмотря на то, что она запутывает и причастна к запутанности в отношении кодов выхода).

Смежные вопросы