端末とは無関係にバックグラウンドでコマンドを実行し、失敗した場合は代替コマンドを実行します。

端末とは無関係にバックグラウンドでコマンドを実行し、失敗した場合は代替コマンドを実行します。

目標:端末とは無関係にコマンドを実行し、すぐに返します。コマンドが失敗した場合は、代替端末非依存コマンドを実行して直ちに返します。

私は次のことをしました。コマンドが有効な場合は動作しますが、失敗してもエラーコード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秒以内に終了した場合は、代替コマンドを実行してください。

関連情報