「Enter」キーなしでユーザー入力をキャプチャ

「Enter」キーなしでユーザー入力をキャプチャ

私は次のようなことをします。

これらのスクリプトはユーザーにパラメータを求めるメッセージを表示し、最終的にそのパラメータに基づいて特定のコマンドを実行します。 (最初にファイル名の入力を求め、引数の入力を求めるスクリプトを想像してくださいchmod。)

問題は、スクリプトが特定のキーシーケンスで終了する必要があることです(たとえば、ユーザーが「Ctrl-」を入力せずに「halt」を入力した場合などC)。

答え1

readwithを使用して、-n 1文字ごとに読み書きした文字列を作成できます。その後、各キャラクターが登場したときに何をするかを決定できます。

val=""
while read -n 1 char; do
    if [[ $char = "" ]]; then
        printf 'Got an enter and the string is %s' "$val"
        # do whatever else you want with it here
        val="" # reset it to get the next param
    else
        val="$val$char" # append input
    fi
    if [[ $val = "halt" ]]; then
        exit
    fi
done

答え2

ジョブの説明によると、入力された文字を文字ごとに処理しないでください。一行ずつ読んでください。文字ごとに読むことは役に立ちません。

スクリプトを終了する以外に+で何もする必要がない場合は、Ctrl何もしないでください。Cこれがデフォルトの動作です。

Ctrl+でいくつかのカスタムコードを実行する必要がある場合C(終了スクリプトで終了することも終了しない場合もあります)、ターミナルドライバに組み込まれたメカニズムがあります。このキーを押してください信号を送る 知能を知らせる。定義する信号用。

cleanup () {
  … whatever you need to do before the script exits …
}
trap 'echo >&2 "Aborting"; cleanup; exit 130' INT
while IFS= read -r line; do
done

関連情報