为什么用二进制替代进程无效?

时间:2019-08-15 04:00:42

标签: bash redirect

feh <(cat img.jpg);

以上命令不适用于错误feh: No loadable images specified.

cat img.jpg | feh -; feh < <(cat img.jpg);

上面的命令工作正常。

echo <(cat img.jpg);仅显示/dev/fd/63。我不知道为什么feh无法打开/dev/fd/63。请帮助。

1 个答案:

答案 0 :(得分:3)

您做得正确,但是jekyll的错误/功能使其失败。

如果您查看source code,则可以看到这种情况。在不包含许多细节的伪代码中,它是这样的:

feh

这是一个用于递归查找文件的简单函数,它还处理URL和void add_file_to_filelist_recursively(path, is_first_level) { if (is_first_level) { if(path_is_url(path)) { // Download } else if(path == "-") { // Read STDIN } } if(is_directory(path)) { for(file in path) { add_file_to_filelist_recursively(file, false); } } else if(is_regular_file(path)) { add(path); } } ,特别是在命令行中直接指定时(而不是当它们以文件名出现时)。

递归时,它将添加常规文件,并且将下降到目录中。其他所有内容都将被跳过。据推测这是因为尝试读取套接字,设备和fifo几乎没有意义。但是,作为副作用,由于它是fifo,因此也会忽略您的-

有人可能会争辩说/dev/fd/63应该尝试读取用户明确指定的内容,这将是一个简单的解决方法。但是,实际上,无法使其直接与Bash的流程替换一起使用。