私は次のようなことをします。
これらのスクリプトはユーザーにパラメータを求めるメッセージを表示し、最終的にそのパラメータに基づいて特定のコマンドを実行します。 (最初にファイル名の入力を求め、引数の入力を求めるスクリプトを想像してくださいchmod
。)
問題は、スクリプトが特定のキーシーケンスで終了する必要があることです(たとえば、ユーザーが「Ctrl-」を入力せずに「halt」を入力した場合などC)。
答え1
read
withを使用して、-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