考虑像这样的命令foo -in /path/to/infile -out /path/to/outfile
,您希望向其传递字符串而不是使用临时文件。它可能被调用很多,导致大量磁盘访问,或者与加密相关,您不想将敏感数据写入磁盘(或处理加密和/或 RAM 磁盘等)。
有没有办法给标准输入并得到输出标准输出,
就像是echo "abc" | foo -in &0 -out &1
?
我知道有一些文件描述符可以重定向数据,例如echo "foo" 1>&2
.诸如此类的东西xargs
可以将字符串作为参数传递。但是是否可以通过某种方式将标准文件描述符作为文件路径传递?如果我可以将 stdin/out 作为文件读取和写入,为什么无法获取其“虚拟”文件路径?
答案1
您可以将特殊文件/dev/stdin
or/dev/fd/0
用于 stdin,和/dev/stdout
or/dev/fd/1
用于 stdout。
在你的例子中:
echo "abc" | foo -in /dev/fd/0 -out /dev/fd/1
这些特殊文件的可用性取决于您所使用的操作系统,但在 Linux(以及大多数 Linux 发行版)上,查找或使用它们应该不会有问题。
这些文件是“虚拟的”,从某种意义上说,写入其中之一不会将数据写入磁盘。打开这些特殊文件之一相当于调用重复(2)系统调用,它将现有的文件描述符复制到新的文件描述符上。