Enterユーザーがコマンドを使用せずにキーを押すまでスクリプトを停止する方法があるかどうか疑問に思います。read
オプションを渡すだけですstty
。
これについてのコードが気になって検索を少ししてみたら、続行するには「空白」が必要なコードを見つけ、変数を空きhold
スペースからに変更しましたが\n
成功しませんでした。
次のようになります。
function _enter-to-continue() {
local hold='\n' # this solution i tried, but without success
printf "Press 'ENTER' to continue or 'ESC' to cancel... "
local original_tty_state=$(stty -g)
trap "stty $original_tty_state; exit 0" 2
stty intr \033
stty raw isig noflsh echo icrnl
until [ -z "${hold#$in}" ]; do
in=$(dd bs=1 count=1 </dev/tty 2>/dev/null)
done
stty "$original_tty_state"
}
ベストアンサー1
私は質問を十分に読まなかったことを認めなければなりません。 1つの理由は、あなたの意図が端末の設定と全く関連していませんが、icrnl
とにかくデフォルトです。
[ -z "${hold#$in}" ]
[ "$in" = ' ' ]
orを言うかなり奇妙な方法です[ "$hold" = "$in" ]
。問題またはコードが$(cmd)
末尾の改行を削除しています。皆さんが待っているのは改行文字だけです。したがって、目的の文字はテストコードに到達しません。あなたはする必要があります
in=$(dd bs=1 count=1 </dev/tty 2>/dev/null; echo x)
in="${in%x}"
もう一つの質問はですlocal hold='\n'
。それは動作しません。 Cではありません。あなたはする必要があります
hold='
'
# or
hold=$'\n'
Enter何も待たないでread
head -n 1 >/dev/null
これはループuntil
全体を置き換えますが、改行でのみ可能です。