我有一个程序可以同时读取两个输入文件。我想让这个程序从标准输入读取。我想我会用这样的东西:
$program1 <(cat) <($program2)
但我刚刚发现
cat <(cat)
produces
....
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
所以... Linux 无法read
在系统调用级别。那很有意思。是bash
没有将标准输入连接到子shell? :(
有针对这个的解决方法吗?我特别需要使用进程替换(... <(...)
格式)因为$program1
(tail
顺便说一句)需要文件,我需要做一些预处理(用od
)在标准输入上,然后我可以将其传递给tail
- 我不能只指定/dev/stdin
et al.
EDIT:
我真正想做的是从文件中读取(另一个进程将写入该文件),而我also从标准输入读取,这样我就可以接受命令等。我希望我能做到
tail -f <(od -An -vtd1 -w1) <(cat fifo)
从标准输入读取and同时将 FIFO 放入单个标准输出流中,我可以通过 awk (或类似的)运行。我知道我可以用任何脚本语言轻松解决这个问题,但我喜欢学习如何制作bash
做一切事情:P
编辑2:我问过一个新问题这更充分地解释了我上面描述的背景。