Подтвердить что ты не робот

Можно ли получить код выхода из подоболочки?

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

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

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

4b9b3361

Ответ 1

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

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

Ответ 2

Вот иллюстрация $? и скобкой скобок, названной Paggas и Matti:

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

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

Ответ 3

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

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

EDIT: Например, при использовании() -стильных блоков по сравнению с bash -c 'command' вам не нужно беспокоиться об экранировании любых строк аргументов с пробелами или любого другого специального синтаксиса оболочки. Вы непосредственно используете синтаксис оболочки, это нормальная часть остальной части кода.