命令需要文件路径。我怎样才能给它标准输入“infile”和标准输出“outfile”?

命令需要文件路径。我怎样才能给它标准输入“infile”和标准输出“outfile”?

考虑像这样的命令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/stdinor/dev/fd/0用于 stdin,和/dev/stdoutor/dev/fd/1用于 stdout。

在你的例子中:

echo "abc" | foo -in /dev/fd/0 -out /dev/fd/1

这些特殊文件的可用性取决于您所使用的操作系统,但在 Linux(以及大多数 Linux 发行版)上,查找或使用它们应该不会有问题。

这些文件是“虚拟的”,从某种意义上说,写入其中之一不会将数据写入磁盘。打开这些特殊文件之一相当于调用重复(2)系统调用,它将现有的文件描述符复制到新的文件描述符上。

相关内容