標準出力をコンソールに送信し、同時に次のコマンドにパイプするにはどうすればよいですか?
ログファイルの最後に出力を変数としてインポートし、ログまたは電子メールでgrepすることができるここで提案されているReadコマンドを試してみましたが、まだstdoutコンソールに出力をインポートしたいと思います。 https://unix.stackexchange.com/a/365222/346155
私は次のようにTeeを試しました。 https://unix.stackexchange.com/a/47936/346155
次の場合に --line-buffered フラグを使用します。 https://stackoverflow.com/a/7162898/4240654
sdtinロジックの簡単な内容が欠落している可能性がありますが、最初のリンクでは、Bashにそのような単純な機能がない可能性があることを示唆しています。そして変数はサブシェルから読み取ることができません。
それが動作するという事実は、echo 'hello' | echo $(</dev/stdin)
それが可能であることを示しています。これを見るもう1つの方法は、各パイプセグメント内のコンソールに標準出力を実行する方法です。これは、bashスクリプトに送信する前に長いコマンドのリストをデバッグするのに役立ちます。
編集:echo 'hello' | echo $(</dev/stdin) >/dev/stout
orのようにecho 'hello' | tee >/dev/stdout | echo 2nd $(</dev/stdin)
、後者は 'hello'を2回印刷する必要がありますが、一度だけ印刷する必要があります。
答え1
使用tee /dev/tty
。例:
echo "Hello word" | tee /dev/tty | wc -c
/dev/tty2
一般的に言うと、同じ名前を使用できます/dev/pts/7
。使用できる限り、現在の端末である必要はありません。
これを見るもう1つの方法は、各パイプセグメント内のコンソールに標準出力を実行する方法です。これは、bashスクリプトに送信する前に長いコマンドのリストをデバッグするのに役立ちます。
私はtmux
ウィンドウを使って同様の操作を便利にしました。を使用または使用せずにこれを実行できますtmux
。
- 必要に応じて必要に応じてウィンドウを準備するか、コンソールウィンドウを準備してください。
- 通話するたびに
tty
端末のファイル名を確認してください。 そのうちの1つはデバッグしたいパイプラインを呼び出し、
tee
各ステップで異なる端末を使用します。このパイプラインcommand1 | command2 | command3
次のように変わります
command1 | tee /dev/pts/4 | command2 | tee /dev/pts/5 | command3
/dev/pts/4
ここで、および/dev/pts/5
は追加の端末です(例:のウィンドウtmux
)。
答え2
... | tee log-file-name
これにより、最初のコマンドの標準出力がログファイルと標準出力にコピーされます。