목표: 터미널과 독립적으로 명령을 실행하고 즉시 반환합니다. 명령이 실패하면 대체 터미널 독립적 명령을 실행하고 즉시 반환하십시오.
나는 다음을 수행했습니다. 명령이 유효하면 작동하지만, 실패해도 오류 코드 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초 이내에 종료된 경우 대체 명령을 실행합니다.