假设我有一个脚本:
foo.sh
希望打开两个文件:
./foo.sh biz baz
在这种情况下,我已经预先计算了文件,并希望从管道传递给foo.sh
,就好像它是一个文件(就像我对ac可执行文件所做的那样) ):
# in pseudo code
./bar.sh initial_baz | ./foo.sh biz -
我尝试过的解决方案:
./bar.sh initial_baz ...
| ./foo.sh biz -
| ./foo.sh biz /dev/stdin
| ./foo.sh biz </dev/stdin
| ./foo.sh biz <$(/dev/stdin)
| ./foo.sh biz $(/dev/stdin)
./foo.sh biz $(./bar.sh initial_baz)
./foo.sh biz <$(./bar.sh initial_baz)
./foo.sh biz `./bar.sh initial_baz`
etc.
必须有一种方法可以将stdin视为文件...?
答案 0 :(得分:2)
这应该有效:
./bar.sh initial_baz | ./foo.sh biz /dev/stdin
您也可以使用process substitution。
./foo.sh biz <(./bar.sh initial_baz)
在某些情况下,管道不起作用(进程替换在内部使用管道):如果foo.sh
试图多次打开文件,或者需要在文件中查找。管道是FIFO队列,您不能多次查找或读取它。