一定時間が経ってもユーザーがコマンドを入力しない場合

一定時間が経ってもユーザーがコマンドを入力しない場合

バラより以下の回答zshソリューションの場合


~/.bash_aliasesシステムを中断する前に、次のことを確認する必要があるとします。

function suspend()
{ #
    echo "Please confirm/cancel system suspension:"
    select confirmation in "confirm" "cancel"; do
        case ${confirmation} in
        confirm )
            echo "System suspending..."
            systemctl suspend
            break;;
        cancel )
            echo "Canceled suspension."
            break;;
        esac
    done
}

systemctl suspendユーザーが答えない場合は、実行を続けたいと思います。たとえば、10秒後にユーザー入力がない場合は、「confirm」ケースの内容が実行されます。

sleepサブシェルで次のことを試しました。

function suspend()
{ #
    flag_cancel=0
    echo "Please confirm/cancel system suspension:"
    (
    sleep 10 &&
        if [ $flag_cancel -eq 0 ]; then
        echo "System suspending..."
        systemctl suspend
        fi &
    )
    select confirmation in "confirm" "cancel"; do
    case ${confirmation} in
        confirm )
        echo "System suspending..."
        systemctl suspend
        break;;
        cancel )
        flag_cancel=1
        echo "Canceled suspension."
        break;;
    esac
    done
}

flag_cancelただし、値の変更は考慮されないため、コマンドは常に存在しますsleep

私が欲しいものを達成する方法は?

ベストアンサー1

read実行時にユーザーから入力を受け取るには、コマンドを試してください。タイムアウトオプションがあるからです。

男性の場合:

-t timeout 入力の行全体をタイムアウト秒以内に読み取らないと、読み取りがタイムアウトし、戻りエラーが発生します。 timeout は、小数点の後に小数部がある 10 進数です。このオプションは、読み取りが端末、パイプ、またはその他の特殊ファイルから入力を読み取る場合にのみ有効です。通常のファイルから読み込むときは効果がありません。タイムアウトがゼロの場合、読み取りは指定されたファイル記述子から入力が可能な場合は成功を返し、そうでない場合は失敗を返します。タイムアウトを超えると、終了ステータスは128より大きくなります。

おすすめ記事