Ответ 1
Для запуска sh name.sh
файла не требуется выполнение. Вместо использования $?
.
sh name.sh
ret_code=$?
Я хочу загрузить файл, например name.sh из другого script, и проверить код возврата и принять его код ошибки. Если я использую
source name.sh
то если name.sh возвращает ненулевой код возврата, мой основной script перестает работать, но мне нужно решить, чтобы погода на выходе была продолжена или остановлена.
Если я использую
ret_code="`source name.sh`"
echo $ret_code
тогда ret_code имеет значение null и код ошибки не печатается. Я не могу использовать их:
sh name.sh
./name.sh
bash name.sh
потому что name.sh не является исполняемым, и я не хочу, чтобы он исполнялся
Для запуска sh name.sh
файла не требуется выполнение. Вместо использования $?
.
sh name.sh
ret_code=$?
Код возврата должен быть в переменной $?
. Вы можете сделать следующее:
source name.sh # Execute shell script
ret_code=$? # Capture return code
echo $ret_code
Амин, возвращаемое значение name.sh - это просто возвращаемое значение последней выполненной команды. Получите доступ к нему, используя $?
, как обычно.
Самый простой способ захвата кода возврата - структурировать "name.sh", так что неудавшиеся команды приводят к тому, что больше не выполняется выполнение команд (что может преуспеть, а затем замаскировать ошибку). Поскольку вы используете bash, вы также можете использовать функции. Просто переместите свою логику в функцию и вызовите ее. Таким образом, ваш name.sh
станет однострочным, а значение $?
будет возвращено функцией.
Например:
# cat fred
function f() {complicated; logic; here; export FRED="asdf";return 1;}
f
# source fred
# echo $?
1
# echo $FRED
asdf
Однако, если вы добавите свою логику в функцию, вы можете также загрузить файл, а затем вызвать функцию в свободное время.
# cat fred
function f() {complicated; logic; here; export FRED="asdf";return 1;}
# source fred
# f && echo "that worked!" || echo "failed again"
failed again
# echo $FRED
asdf