Давайте предположим, что у меня есть сценарий удара, где я называю это:
bash -c "some_command"
do something with code of some_command here
Действительно ли возможно получить код some_command
? Я не выполняюсь some_command
непосредственно в оболочке, запускающей скрипт, потому что я не хочу изменяться, это - среда.
$?
, как обычно, будет содержать код возврата some_command
.
Конечно, он также может содержать код из bash на случай, если что-то пойдет не так до того, как ваша команда может быть выполнена (неправильное имя файла, еще много чего).
Вот иллюстрация $?
и подоболочки скобок, упомянутой Паггасом и Матти :
$ (exit a); echo $?
-bash: exit: a: numeric argument required
255
$ (exit 33); echo $?
33
В первом случае это код Bash ошибка, а во втором случае это код выхода exit
.
Вы можете использовать переменную $?
, для этого обратитесь к документации bash, она сохраняет статус завершения последней команды.
Кроме того, вы можете проверить командные блоки bash в виде скобок (например, comm1 && (comm2 || comm3) && comm4
), они всегда выполняются в подоболочке, что не влияет на текущая среда, а также более мощные!
РЕДАКТИРОВАТЬ: Например, при использовании блоков в стиле () по сравнению с bash -c 'command' вам не нужно беспокоиться об экранировании строк аргументов пробелами или о любом другом специальном синтаксисе оболочки. Вы напрямую используете синтаксис оболочки, это обычная часть остального кода.