続行するにはEnterキーを押します。

続行するにはEnterキーを押します。

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全体を置き換えますが、改行でのみ可能です。

おすすめ記事