6

Я использую Debian 6.0. Я знаю обычные аргументы командной строки, но не могу найти, что $? предназначен для? Кто-нибудь имеет представление о том, что подразумевается под $? в оболочке Linux?

4 ответа4

15

Баш, а не оболочка. (Баш - всего лишь одна из нескольких возможных оболочек. Это самое распространенное, хотя)

Это означает код выхода последней выполненной команды.

Смотрите здесь: http://tldp.org/LDP/abs/html/othertypesv.html и здесь http://tldp.org/LDP/abs/html/exit-status.html

5

Для оболочек, поддерживающих эту переменную оболочки "$?msgstr "содержит код возврата команды, выполненной последним.

Так что, если вы запускаете программу "abc", которая возвращает 1 при выходе

$ echo $?

дает "1" - код возврата.

И он доступен не только в bash, но и в других оболочках.

2

Код возврата последней выполненной программы.

0

Вау, они упомянули, что это код возврата последней выполненной программы, но никто не упомянул, что, если он больше 0, это, вероятно, указывает на ошибку. Общей практикой является то, что когда программа или скрипт выполняется без ошибок, он возвращает значение 0, чтобы указать, что он завершился без ошибок. Не все программы и скрипты делают, но они должны.

Проверка значения $? после запуска команда linux должна сообщить вам, были ли ошибки или нет. Проверьте документы каждой программы, чтобы узнать возможные возвращаемые значения. Некоторые не возвращают значение, но большинство делают. В ваших сценариях вы должны заканчивать 'return X', где X - это какое-то значение 0 = исправно / нет ошибок, а что-либо больше нуля указывает на возникшую проблему Даже если все, что вы используете, это значения 0 или 1, это хорошая практика. Это позволяет другим сценариям знать, должна ли следующая строка / команда выполняться на основании успеха или неудачи последней команды. Это делает для более умных сценариев и лучшего контроля.

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