目标:独立于终端运行命令并立即返回。如果命令失败,请运行独立于终端的替代命令并立即返回。
我做了以下事情。如果命令有效则有效,但即使失败也会返回错误代码 0。可以通过删除第一个拒绝来纠正代码,但命令不会立即返回。
ErrorCode=$(
nohup "${Command[@]}" >/dev/null 2>&1 &
Pid=$!
disown "${Pid}"
wait "${Pid}"
echo "$?"
)
if ((ErrorCode != 0)); then
nohup "${CommandAlternative[@]}" >/dev/null 2>&1 &
else
echo "#Debug: ErrorCode: ${ErrorCode}"
fi
所以基本上我无法捕获上一个命令的错误代码。命令是mpv "${MusicFile}"
答案1
假设如果命令失败并退出,则不到 3 秒:
"${Command[@]}" >/dev/null 2>&1 &
Pid=$!
disown "${Pid}"
sleep 3
if ! ps --pid "$Pid" >/dev/null; then
"${CommandAlternative[@]}" >/dev/null 2>&1 &
disown
fi
作用:如果上一个命令失败并在 3 秒内退出,则运行替代命令。