在后台独立于终端运行命令,如果失败则运行替代命令

在后台独立于终端运行命令,如果失败则运行替代命令

目标:独立于终端运行命令并立即返回。如果命令失败,请运行独立于终端的替代命令并立即返回。

我做了以下事情。如果命令有效则有效,但即使失败也会返回错误代码 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 秒内退出,则运行替代命令。

相关内容