デフォルトでは、STDOUT
のみ リダイレクトおよび/またはパイプされます。あなたが望むのは STDOUT
を離れることです STDIN
経由で渡されたものは何でも持っています リダイレクトされました。
the_command
を編集する場合 はオプションです。質問が STDERR
に出力されるようにすることができます 代わりに(リダイレクトに関係なく画面にダンプする必要があります)、ユーザーが入力したものを STDOUT
経由で画面に表示します .
コマンドが機能し、出力をファイル abc.txt
に適切にリダイレクトします .
問題は、スクリプトが入力データをどのように要求しているかです スクリプトをどのように実行していますか?
2 つの例で見てみましょう:
# Script_1.sh # 1
echo Please, enter your firstname and lastname # 2
read FN LN # 3
echo "Hi! $LN, $FN !" # 4
そして
# Script_2.sh # 5
read -p "Enter a comment " CM # 6
echo "You said $CM" # 7
/bin/bash Script1.sh > abc.txt
を実行した場合 tty に「Please enter...」という質問は表示されません。キーボードから期待される入力を与える場合、abc.txt
の 2 行目と 4 行目の出力が見つかります。 ファイル。
/bin/bash Script2.sh > abc.txt
を実行した場合 「コメントを入力してください」という質問が表示されますが、abc.txt
で見つかります。 7 行目の出力のみをファイルします。
注:サブシェルで Script2,sh を実行する場合
(bash Script2.sh 2>&1)> abc.txt
tty には何も出力されず、abc.txt
にすべてが表示されます。 ファイル。
で実行すると
bash Script2.sh 2>ccc.txt 1>ddd.txt`
ddd.txt
に標準出力 (7 行目) があります。 ccc.txt
の標準エラー (6 行目) .
コマンド出力の一部のみをリダイレクトしたい場合 スクリプトを変更する必要があります。
それを行う方法の 1 つは、興味深い出力を生成するスクリプトの一部を移動する関数を作成することです (以下を参照)。次に、主要部分からこの関数を呼び出すことができます スクリプトの (元は関数に移動したコードであった) その出力のみをログ ファイルにリダイレクトします:
Part_To_Redirect(){
: # all that you want
}
# ... Main part of the script
# point where it was the part that generates the output
Part_to_Redirect "[email protected]" > abc.txt # this to store only that part in the file
# Part_to_Redirect "[email protected]" >> abc.txt # this to append that part in the file
# ...
便利な tee
も見つかるはずです それ
出力を複数のファイルにリダイレクトし、標準入力を標準出力にコピーします また、引数として指定されたファイルにも。
the_command | tee abc.txt # To redirect Standard output
or
the_command 2>&1 | tee abc.txt # To redirect err in out and both in the file
この場合、tty でコマンドの通常の出力が得られますが、同時にログ ファイル abc.txt
にコピーが保存されます。 . read -p
を使用すれば、あなたのケースでは居心地が良いはずです script2 の呼び出し the_command | tee abc.txt
のように .
メモと参考文献:
"[email protected]"
を追加 スクリプトのすべての引数を関数に渡すことができます。
インターネット上の多くの情報源から bashredirection について詳しく読むと、興味深いことがわかるかもしれません。
- Scott のコメントで示唆されているように、Unix SE の wiki 回答があります:良い出発点です。
- A must the
man bash
または bash マニュアル。 - bash-hackers のリダイレクトの章が役に立ちました。廃止された用途へのリンクもあります。
- Advanced Bash-Scripting Guide の第 20 章も参照できます。