使用例
$ diff `pr_sbs echo hoge` `pr_sbs echo fuga`
1c1
< hoge
---
> fuga
書き込みの場合
$ echo hoge | tee `pr_sbs -w wc -l \> test`
hoge
$ cat test
1
エスケープがいる場合
$ echo hoge | tee `pr_sbs -w cat \| awk \''{print $1" "$1}'\' \> test`
hoge
$ cat test
hoge hoge
コード
/dev/shmが使えない場合は適当に変更する。
関数化する場合はmktempを使ったほうが良さそう。
pr_sbs
#!/bin/dash
f=/dev/shm/pr_sbs.$$
rm -f $f
mkfifo $f
echo $f
exec >&-
{
case "$1" in
-r) shift
eval "$@" > $f ;;
-w) shift
eval "$@" < $f ;;
*) eval "$@" > $f ;;
esac
rm -f $f
} &
標準出力を閉じないとコマンド置換が突き放し処理を待ってハングする。
仕組み上標準出力はできない。