存在するWindowsバッチ/ CMD - 使用可能なスクリプトの実行を一時停止します。
echo 'This is before pause.'
pause
echo 'The key was pressed, continuing...'
bash
このような標準端末を使用してzsh
これを達成するにはどうすればよいですか(ただし、他の端末もできるだけ機能する必要があります)。もちろん簡単なアプリを書くこともできますが、私が探しているC
標準的な方法がないとは思いません。sleep
私は以下を使用してこれらの簡単な方法を見つけました。読む:
read -p 'Press [Enter] key to start backup...'
read -p 'Press any key to resume ...'
read -s -n 1 -p 'Press any key to continue . . .'
関数の内部
しかし、彼らは私にそれぞれXXX.sh: 4: read: arg count
最初の23: read: Illegal option -n
つを与えました。私はbashを使用しています4.4.19(1)-release
。
答え1
read
コマンドが機能しない主な理由は、bash
コマンドが意図されていますがsh
。
これ引用記事説明する、
Unixシリーズオペレーティングシステムでは、シェル
read
に組み込まれているコマンドです。bash
これは、使用中のシェルを含む他の多くのシェルにも組み込まれたコマンドですが、sh
inの構文ははるかに豊富です。read
sh
#!/bin/bash
...
read -p 'Press [Enter] key to continue: '
...
ファイルを実行可能にし、プログラムで実行することを忘れないでください。
# Assume the script is called "demo"
chmod a+x demo
./demo
答え2
簡単に言えば、シングルキーを押すのを待つ簡単な方法はありません。Enterユーザーが行を入力するのを待つ簡単な方法があるため、ユーザーに押すように求める方が簡単です。
組み込みread
コマンドは1行を読み込みます。その行を使用する予定がない場合でも、その行の内容を保存するには変数名を指定する必要があります。
echo 'Press Enter to continue.'
read -r line
echo 'Continuing.'
#!/usr/bin/env bash
スクリプトがまたは同等のもので始まる場合は、#!/usr/bin/env zsh
シングルread
キーを押すのを待つようにする追加のオプションがあります。どのキーが「すべてのキー」と見なされ、どのキーがそうでないかをユーザーに教えることは苦労する価値がないと思います。
Unixシリーズでは、端末なしで無人でスクリプトを実行するのが一般的です。一般的なサーバーには、ほとんどの場合、コンソールにログインした人はいません。そのため、ユーザーに確認を求める場合は非常にまれです。
答え3
read_a_key() (
exec </dev/tty
t=$(stty -g)
trap 'stty "$t"; return' EXIT INT QUIT TERM
stty raw -echo isig
dd count=1 2>/dev/null
)
printf '%s ' 'Press ANY KEY to continue ... '
key=$(read_a_key)
echo OK, continuing
read_a_key >/dev/null
ユーザーがどのキーを押したか気にしないように使用してください。
これは、次のコマンドにfalseまたは文字を残すF1
bashとは異なり、複数の文字(たとえば)に変換されるキーにも機能します;-)read -n1
OP
[[A
答え4
あなたは正しい道を行っています:
read -p 'press Enter ...'
しかし、arg_countエラーが発生した場合は、bash以外のシェルを使用しています。修正:次のパラメータを追加するだけです。
read -p 'press Enter ...' x
これでシェルで実行する必要があります。追加のパラメータはダミー名またはユーザーの回答を保存するために使用できます。例:
echo You answered: $x