Действительно ли возможно получить код выхода от подоболочки?

Давайте предположим, что у меня есть сценарий удара, где я называю это:

bash -c "some_command"
do something with code of some_command here

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

25
задан Geo 31 March 2010 в 20:06
поделиться

3 ответа

$? , как обычно, будет содержать код возврата some_command .

Конечно, он также может содержать код из bash на случай, если что-то пойдет не так до того, как ваша команда может быть выполнена (неправильное имя файла, еще много чего).

29
ответ дан 28 November 2019 в 18:23
поделиться

Вот иллюстрация $? и подоболочки скобок, упомянутой Паггасом и Матти :

$ (exit a); echo $?
-bash: exit: a: numeric argument required
255
$ (exit 33); echo $?
33

В первом случае это код Bash ошибка, а во втором случае это код выхода exit .

26
ответ дан 28 November 2019 в 18:23
поделиться

Вы можете использовать переменную $? , для этого обратитесь к документации bash, она сохраняет статус завершения последней команды.

Кроме того, вы можете проверить командные блоки bash в виде скобок (например, comm1 && (comm2 || comm3) && comm4 ), они всегда выполняются в подоболочке, что не влияет на текущая среда, а также более мощные!

РЕДАКТИРОВАТЬ: Например, при использовании блоков в стиле () по сравнению с bash -c 'command' вам не нужно беспокоиться об экранировании строк аргументов пробелами или о любом другом специальном синтаксисе оболочки. Вы напрямую используете синтаксис оболочки, это обычная часть остального кода.

7
ответ дан 28 November 2019 в 18:23
поделиться
Другие вопросы по тегам:

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