Bash 为什么二进制进程替换不';不行? feh
您的操作是正确的,但是Bash 为什么二进制进程替换不';不行? feh,bash,redirect,Bash,Redirect,您的操作是正确的,但是feh有一个错误/功能使它失败 如果你看一下,你可以看到这是怎么发生的。在排除了大量细节的伪代码中,如下所示: feh <(cat img.jpg); 这是一个递归查找文件的简单函数,它还处理URL和-,特别是当直接在命令行上指定时(而不是当它们显示为文件名时) 在递归过程中,它将添加常规文件,并下降到目录中。其他任何内容都将被跳过。这大概是因为尝试读取套接字、设备和FIFO很少有意义。但是,作为一个副作用,它也会忽略您的/dev/fd/63,因为它是一个fifo
feh
有一个错误/功能使它失败
如果你看一下,你可以看到这是怎么发生的。在排除了大量细节的伪代码中,如下所示:
feh <(cat img.jpg);
这是一个递归查找文件的简单函数,它还处理URL和-
,特别是当直接在命令行上指定时(而不是当它们显示为文件名时)
在递归过程中,它将添加常规文件,并下降到目录中。其他任何内容都将被跳过。这大概是因为尝试读取套接字、设备和FIFO很少有意义。但是,作为一个副作用,它也会忽略您的/dev/fd/63
,因为它是一个fifo
有人可能会说,
feh
应该尝试读取用户明确指定的任何内容,这将是一个简单的解决方案。然而,事实上,没有办法让它直接与Bash的进程替换一起工作。但是mpv复制了feh img.jpg
??你为什么要在这里进行任何类型的替换?@DavidC.Rankin,以防出现feh,这就是原因。如果没有这个例子,您试图实现的目标有点令人困惑。不仅是feh,而且eog和gimp都不起作用。这是否意味着它们都共享相同的文件读取算法?由于进程替换的工作方式,很容易破坏支持。有些程序在启动时关闭所有未知的FD(如63),有些是客户机/服务器或单个实例,其中可执行文件只是中继命令,而不是打开FD,有些程序尝试打开两次文件或回放FIFO不支持的文件。您必须查看每个单独的程序,以了解其失败的具体原因。
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);
}
}