Bash:標準出力をコンソールに送信し、次のコマンドにパイプする方法は?

Bash:標準出力をコンソールに送信し、次のコマンドにパイプする方法は?

標準出力をコンソールに送信し、同時に次のコマンドにパイプするにはどうすればよいですか?

ログファイルの最後に出力を変数としてインポートし、ログまたは電子メールで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/stoutorのようにecho 'hello' | tee >/dev/stdout | echo 2nd $(</dev/stdin)、後者は 'hello'を2回印刷する必要がありますが、一度だけ印刷する必要があります。

答え1

使用tee /dev/tty。例:

echo "Hello word" | tee /dev/tty | wc -c

teeそして/dev/ttyPOSIXに必要です。


/dev/tty2一般的に言うと、同じ名前を使用できます/dev/pts/7。使用できる限り、現在の端末である必要はありません。

これを見るもう1つの方法は、各パイプセグメント内のコンソールに標準出力を実行する方法です。これは、bashスクリプトに送信する前に長いコマンドのリストをデバッグするのに役立ちます。

私はtmuxウィンドウを使って同様の操作を便利にしました。を使用または使用せずにこれを実行できますtmux

  1. 必要に応じて必要に応じてウィンドウを準備するか、コンソールウィンドウを準備してください。
  2. 通話するたびにtty端末のファイル名を確認してください。
  3. そのうちの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

これにより、最初のコマンドの標準出力がログファイルと標準出力にコピーされます。

関連情報