コマンドの出力をパイプして送信する方法はありますかstdout
?
たとえば、fortune
フォーチュンクッキーを印刷し、stdout
次のコマンドにパイプします。
$ fortune | tee >(?stdout?) | pbcopy
"...Unix, MS-DOS, and Windows NT (also known as the Good, the Bad, and
the Ugly)."
(By Matt Welsh)
答え1
tee
常に標準出力に書き込みます。標準出力がすでに送信されている端末に加えてコマンドにデータを送信するには、そのコマンドのプロセスオーバーライドを使用します。 (で始まっても、>
プロセス置換は標準出力をリダイレクトせず、tee
コマンドはそれを引数として扱います。)
fortune | tee >(pbcopy)
答え2
あなたの家:
fortune | tee >(?stdout?) | pbcopy
出力がstdoutに2回書き込まれるので、fortune
出力がpbcopy
。
OSX(およびその他のサポートされているシステム/dev/std{out,err,in}
)では、次のことを確認できます。
$ echo 1 | tee /dev/stdout | sed 's/1/2/'
2
2
sum2
の代わりに2回印刷します。出力が2回移動し、プロセスがパイプによってリダイレクトされるため、これらのすべての出力が実行され、ここで2回表示されます。1
2
tee
stdout
tee
stdout
sed
sed
2
標準エラーなどの他のファイル記述子を使用する必要があります/dev/stderr
。
$ echo 1 | tee /dev/stderr | sed 's/1/2/'
1
2
または、tty
疑似端末を使用して接続を取得します。
$ echo 1 | tee "$(tty)" | sed 's/1/2/'
1
2
zsh
設定オプションを使用すると、以下をmultios
行う必要はありません。tee
$ echo 1 >/dev/stderr | sed 's/1/2/'
1
2
答え3
cuonglmが言った。
あなたは試してください:
fortune | tee "$(tty)" | pbcopy
tty
/dev/pts/99
対話型セッション(例:端末)では、実際の擬似端末(例:)として確認する必要があります。またはいいえttyバッチ、at、デーモン。