read
は標準出力に書き込まないようです。
$ cat test.sh #!/ bin/bash read -p "キーを入力して入力" key echo "キーは$ keyでした" $ ./test.sh キーを入力し、Enterx キーはx $ ./test.sh | tee file キーを入力し、Enterx キーはx $ cat file キーはx でした
スクリプトなしで試してみてください...
$ read -p "キーを入力してEnter"キー| tee file キーを入力してEnterx $ cat file $
read
コマンドは here で説明されています。簡単な説明:「標準入力から行を読み取る」。
The Linux Command Line(2nd Internet Edition) からのパイプ|
についての情報は、William E. Shottsによるものです。
パイプ演算子「|」を使用する(垂直バー)、1つのコマンドの標準出力を別のコマンドの標準入力にパイプすることができます:
command1 | command2
tee
のmanページには、次の説明があります。
標準入力から読み取り、標準出力とファイルに書き込む
tee
のmanページは、この link にあります。
コンソールに書き込むが実際には標準出力を使用しないプログラムの他のすべての例のリストはどこにありますか、またはそのようなリストがない場合、コンソールに書き込むプログラムがそうでない場合を知るための一般的なルールは何ですか?標準出力を使用していますか?
read
は違反しているようです 最低驚きの原理 。
あなたの例では、read
はstdoutではなくstderrに書き込んでいます。ここに私が知っている方法があります:
$ read -p "キーを入力してEnterキーを押す:" key>/dev/null キーを入力してEnterキーを押す:x $ read -p "キーを入力するEnterを押します: "キー2>/dev/null x
出力をリダイレクトするプログラムでこのテストを実行できます。
だからあなたが探しているコマンドはこれです:
$ read -p「キーを入力してEnterキーを押します。」キー2>&1 | tee file キーを入力してEnterキーを押します:x $ cat file キーを入力してEnterキーを押します:$
上記のリダイレクトの説明:
Wjandreaが言ったことで、readが行っているstderr
をつかむことができるのは正しいことです。残念ながら、stderr
を使用して読み取ろうとすると、key
の変数が保持されないため、echo $key
の出力は空白になります。ただし、スクリプトでは、読み取り行自体がスクリプト内のstderr
からstdout
2>&1
にリダイレクトされないため、変数を保持します。代わりに、スクリプトはリダイレクトを取得する前に変数が設定されるため、変数は保持されます。簡単にするために、代わりにecho
行を使用すると思います。すべての例を追加しました。
スクリプトの例:
:~$ cat test1.sh
#!/bin/bash
read -p "type a key and Enter: " key
echo "the key was $key"
:~$ ./test1.sh | tee junk
type a key and Enter: G
the key was G
:~$ cat junk
the key was G
2>&1
リダイレクトを使用する場合:
:~$ ./test1.sh 2>&1 | tee junk
type a key and Enter: G
the key was G
:~$ cat junk
type a key and Enter: the key was G
echo
行を使用:
:~$ cat test.sh
#!/bin/bash
echo -n "Type a key and press Enter: "
read key
echo "the key was $key"
teeコマンドを使用したecho
行:
:~$ ./test.sh | tee junk
Type a key and press Enter: X
the key was X
:~$ cat junk
Type a key and press Enter: the key was X
Noスクリプトの例:
stderr
の場合:
:~$ read -p "Type a key and press Enter: " key 2>&1 |tee junk; echo "The key was $key" | tee -a junk
Type a key and press Enter: F
The key was
:~$ cat junk
Type a key and press Enter: The key was
代わりにecho
と複数のteeコマンドを使用:
:~$ echo -n "Type a key and press Enter: " | tee junk; read key; echo "The key was $key" | tee -a junk
Type a key and press Enter: F
The key was F
:~$ cat junk
Type a key and press Enter: The key was F
お役に立てれば!