web-dev-qa-db-ja.com

ティーstdoutからstderr?

Stdoutをあるプロセスから別のプロセスのstdinだけでなく、コンソールにも送信したいのですが。たとえば、stdoutをstdout + stderrに送信します。

たとえば、git editは次のエイリアスです:

git status --short | cut -b4- | xargs gvim --remote

ファイル名のリストを画面とxargsに送信してください。

それで、これを行うteeのようなユーティリティはありますか?だから私は次のようなことをすることができます:

git status --short | \
    cut -b4- | almost-but-not-quite-entirely-unlike-tee | \
    xargs gvim --remote
20
Roger Lipscombe

teetee /dev/ttyを使用して現在のコンソールに複製できます

git status --short | cut -b4- | tee /dev/tty | xargs gvim --remote

または、/dev/stdoutまたは/dev/stderrを使用することもできますが、コマンドがスクリプト内にある場合はリダイレクトされます。 /dev/ttyは常にコンソールになることに注意してください(非インタラクティブシェルには存在しない場合があります)。 これは間違っています。コメントを読んでください。

16
Vincent Robert

/dev/ttyよりも一般的なソリューション:

start cmd:> echo foo | tee /dev/stderr 
foo
foo
4
Hauke Laging

teeコマンドを使用できます。例として、STDERRファイルを入力するだけです。

tee /dev/stderr
tee /proc/self/fd/2

その場合、あなたのエイリアスは多分:

git status --short | \
    cut -b4- | tee /dev/stderr | \
    xargs gvim --remote
3
MolbOrg