我set -e在脚本的顶部。如何避免某些命令和进程退出代码的脚本终止?我在遵循代码示例时遇到困难:
我需要输出到变量和退出代码,但这并不set -e容易。
set -e
...
formoutput=$(yad --form --field="Subdomain" --field="Domain" --field="Web master username" \
--field="Apache group" --field='Webroot' \
--field='Webroot variables - ${homedir}(of webmaster) ${subdomain} ${webmaster} ${domain}:LBL' \
--field="Virtualhost ip or domain" \
--field="Virtualhost port" --field="Server admin email" \
--field="Create mysql user&db:CHK" \
--button="Cancel:3" --button="Save defaults:2" --button="Create:0" \
--title="Create apache virtualhost" \
--text='Subdomain are case sencetive for Webroot folder ${subdomain} variable' \
--focus-field=1 --center --window-icon="preferences-system" --width=600 \
"${config[subdomain]}" "${config[domain]}" "${config[webmaster]}" "${config[webgroup]}" \
"${config[webroot]}" "test" "${config[virtualhost]}" "${config[virtualport]}" "${config[serveradmin]}" 1)
formbutton="$?"
Run Code Online (Sandbox Code Playgroud)
您需要处理命令的退出代码。
命令的退出状态是最后执行的命令的退出状态。
变量赋值不是命令。
所以你可以做脚本中流行的事情set -e:
formoutput=$(yad ...) || ret=$? && ret=$?
Run Code Online (Sandbox Code Playgroud)
捕获返回值。
:或者您可以通过调用命令来忽略退出:
formoutput=$(yad ...) ||:
Run Code Online (Sandbox Code Playgroud)
确实||:是||有:命令的。冒号命令返回零退出状态,命令列表的退出状态a || b是列表中最后执行的命令的退出状态,因为:总是返回零,命令列表也将返回零退出状态。
或者使用if:
if ! formoutput=$(yad ...); then
echo "AAAA! yad failed! abort ship!" >&2
fi
Run Code Online (Sandbox Code Playgroud)
请注意,该if命令还具有最后执行的命令的退出状态。所以请注意:
if true; then
false
fi
Run Code Online (Sandbox Code Playgroud)
将从您的set -e脚本中退出。