Ответ 1
Вы можете использовать x"${BASH_SOURCE[0]}" == x"$0"
, чтобы проверить, был ли источник script получен или вызван (false, если источник, true, если вызвано) и return
или exit
соответственно.
Я хотел бы вернуть код выхода из BASH script, который вызывается внутри другого script, но также может быть вызван напрямую. Он примерно выглядит следующим образом:
#!/bin/bash
dq2-get $1
if [ $? -ne 0 ]; then
echo "ERROR: ..."
# EXIT HERE
fi
# extract, do some stuff
# ...
Теперь в строке EXIT HERE
script должен выйти и вернуть код выхода 1. Проблема в том, что
return
, потому что, когда я забуду исходный script вместо его вызова, return не выйдет, а остальная часть script будет выполнена и запутаться.exit
, потому что это закрывает оболочку.kill -SIGINT $$
, потому что это не позволяет вернуть код выхода.Есть ли жизнеспособная альтернатива, которую я упустил?
Вы можете использовать x"${BASH_SOURCE[0]}" == x"$0"
, чтобы проверить, был ли источник script получен или вызван (false, если источник, true, если вызвано) и return
или exit
соответственно.
Используйте это вместо выхода или возврата:
[ $PS1 ] && return || exit;
Работает ли источник или нет.
Другой вариант - использовать функцию и поместить в нее возвращаемые значения, а затем просто либо указать источник script (source processStatus.sh), либо вызвать script (./processStatus.sh). Например, рассмотрим processStatus.sh script, который должен вернуть значение stopProcess.sh script, но также должен быть вызван отдельно от командной строки без использования источника (включая только соответствующие части) Например:
function checkProcess {
if [ $1 -eq "50" ]
then
return 1
else
return 0
fi
}
checkProcess
и
source processStatus.sh $1
RET_VALUE=$?
if [ $RET_VALUE -ne "0" ]
then
exit 0
fi