次のシェルスクリプトを検討してください。
val=($ls)
Lsはシェルテキスト出力を提供しません。では、コマンドの実行中に画面に出力テキストを取得するにはどうすればよいでしょうか。
Valの値を出力して出力を取得できますが、echoを使用しても意味がありません。したがって、次の行を使用すると、そうではありません
echo $val
つまり、簡単に言えば、シェルで実行されている現在のコマンドの出力を、コマンドが単独で実行されたかのように同時に取得するにはどうすればよいですか?
次のコマンドを実行することで、シェルにすべての動作をエコーさせることができます。
sh -x yourscript
または、これをスクリプトの最初のコマンドとして追加できます。
セットx
ただし、少々冗長になりすぎます。デバッグは問題ありませんが、選択的な出力が必要な場合は、エコーコマンドを慎重に配置して自分で行うのが最善です。
tee
コマンドを使用して、標準出力のコピーをファイルに送信し、現在の端末をその出力ファイルとして使用できます。以下に示すように、何も出力を使用しない場合は2回印刷され、標準出力が何かに使用されて飲み込まれる場合は1回印刷されます。
$ echo foo | tee -a /dev/tty
foo
foo
$ echo foo | tee -a /dev/tty | grep bar
foo