假设我有一个脚本:
foo.sh
期望打开两个文件:
./foo.sh biz baz
<小时/>
在这种情况下,我已经预先计算了文件,并希望从管道传递到 foo.sh
就好像它是一个文件(就像我对 c 可执行文件所做的那样):
# 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 是一个文件一样进行重定向...?
这应该有效:
./bar.sh initial_baz | ./foo.sh biz /dev/stdin
您还可以使用process substitution .
./foo.sh biz <(./bar.sh initial_baz)
但在某些情况下,管道不起作用(进程替换在内部使用管道):如果 foo.sh
尝试多次打开文件,或者需要在文件中查找。管道是一个 FIFO 队列,您不能多次查找或读取它。
我是一名优秀的程序员,十分优秀!