LoginSignup
1
0

More than 5 years have passed since last update.

dashでプロセス置換を再現する

Last updated at Posted at 2018-03-18

使用例

$ 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
} &

標準出力を閉じないとコマンド置換が突き放し処理を待ってハングする。
仕組み上標準出力はできない。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0