我有一个同时从两个输入文件中读取的程序。我想让这个程序从标准输入中读取。我想我会使用这样的东西:
$program1 <(cat) <($program2)
但我刚刚发现
cat <(cat)
生产
....
mmap2(NULL, 139264, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb758e000
read(0, 0xb758f000, 131072) = -1 EIO (Input/output error)
....
cat: -: Input/output error
同样,
$ cat <(read -n 1)
bash: read: read error: 0: Input/output error
read
所以... Linux在系统调用级别上失败了。那很有意思。不是bash
将标准输入连接到子外壳吗?:(
有针对这个的解决方法吗?我特别需要使用进程替换(... <(...)
格式),因为$program1
(tail
顺便说一句) 需要文件,并且我需要od
对标准输入进行一些预处理 (with ),然后才能将其传递给tail
- 我不能只指定/dev/stdin
等。
编辑:
我真正想做的是从文件中读取(另一个进程将写入),同时我也从标准输入中读取,这样我就可以接受命令等。我希望我能做到
tail -f <(od -An -vtd1 -w1) <(cat fifo)
同时从标准输入和FIFO 中读取并将其放入可以通过 awk(或类似方法)运行的单个 stdout 流中。我知道我可以用任何脚本语言轻松解决这个问题,但我喜欢学习如何bash
做所有事情:P
编辑 2:我问了一个新问题,更充分地解释了我刚才描述的上下文。