bashでパイプの間を覗き見るTIPS
ファイルを書き出せば充分なんだけど…bashでパイプの間を覗き見たいとおもった。
teeと/dev/stderr を組み合わせればすぐに着陸できる。
$ echo -e "hello world\nfoo bar buzz\n" | tee /dev/stderr | sed 's/ /,/' | tee /dev/stderr | sed 's/,/:/' hello world foo bar buzz hello,world foo,bar buzz hello:world foo:bar buzz
すごく悩んでしまった。
と、いうことで 整形前、整形後、実行後という表示も可能になる
$ echo -e 'main(){\nprintf("hello world\\n");\n}\n'|tee /dev/stderr | indent2 c | tee /dev/stderr| rungcc main(){ printf("hello world\n"); } main(){ printf("hello world\n"); } hello world
逆になるけど/dev/fd/3を使う手もある
$ echo -e "hello world\nfoo bar buzz\n" | (tee /dev/fd/3 | sed 's/ /,/') 3>&1 hello,world foo,bar buzz hello world foo bar buzz
~/.bashrcに以下を書いておけばもすこし使いやすいかな。
alias peek='{ tee /dev/stderr;echo "***">/dev/stderr; }'
そうか、バッファがフラッシュするタイミングが違うな。あまり多用できないな(笑
$ echo -e "hello world\nfoo bar buzz\n" | peek | sed 's/ /,/' hello world foo bar buzz hello,world foo,bar buzz *** $ echo -e "hello world\nfoo bar buzz\n" | peek | sed 's/ /,/' | peek | sed 's/,/:/' hello world foo bar buzz *** hello,world foo,bar buzz hello:world foo:bar buzz ***