次のシェルスクリプトを考えてみましょう。
val=($ls)
lsはシェルテキスト出力を提供しません。これで、コマンドの実行中に画面に出力テキストをどのように取得できますか?
出力を得るためにval値を印刷できますが、echoを使用することは重要ではありません。したがって、次の行を使用するのは事実ではありません。
echo $val
つまり、コマンドを直接実行したように、現在のコマンドの出力をシェルで同時に実行するにはどうすればよいですか?
答え1
次のコマンドを実行すると、シェルが実行しているすべてのコンテンツをエコーできるようになります。
sh -x yourscript
または、スクリプトの最初のコマンドとして追加できます。
set -x
しかし、内容が少し長すぎる可能性があります。デバッグには問題ありませんが、オプションの出力が必要な場合は、echoコマンドを直接慎重に配置することをお勧めします。
答え2
tee
標準出力のコピーをファイルに送信するように命令でき、現在の端末をその出力ファイルとして使用できます。以下に示すように、出力に何もしない場合は2回印刷され、標準出力にジョブを実行して飲み込むと一度だけ印刷されます。
$ echo foo | tee -a "$(tty)"
foo
foo
$ echo foo | tee -a "$(tty)" | grep bar
foo