我有一个同时从两个输入文件读取数据的程序。我想让这个程序从标准输入读取数据。我打算使用类似以下的代码:
$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
那么……Linux在系统调用级别上无法“读取”。这很有趣。是bash没有将stdin连接到子shell吗? :(
是否有解决方案?我需要特别使用进程替换(... <(...)
格式),因为$program1
(顺便说一下,是tail
)期望文件,并且我需要对标准输入进行一些预处理(使用od
),然后才能将其传递给tail
- 我不能只指定/dev/stdin
等。
编辑:
实际上,我想要做的是从一个文件中读取(另一个进程将写入该文件),同时我还可以从标准输入中读取,以便我可以接受命令等等。我希望我可以这样做:
tail -f <(od -An -vtd1 -w1) <(cat fifo)
我希望能够同时从标准输入和FIFO中读取,并将其传输到单个stdout流中,以便可以通过awk(或类似工具)运行。我知道可以在任何脚本语言中轻松解决此问题,但我喜欢学习如何让bash做一切:P
编辑2:我已经提出了一个新问题,更充分地解释了我上面描述的背景。
ssh user@host
吗? - pynexj