更易于展示,而不是用言语来描述。
find . -name jo\* -print > list
cat list
#./jo1
#./jo2
#./jo3
# the "file" by reading the list of files from the file "list"
file -f list
#./jo1: ASCII text
#./jo2: ASCII text
#./jo3: ASCII text
#now with process substitution
file -f <(find . -name jo\* -print)
没有输出任何内容... ;(
#repeat with -x
set -x
file -f <(find . -name jo\* -print)
set +x
#shows
+ file -f /dev/fd/63
++ find . -name 'jo*' -print
+ set +x
所以,这应该是可行的。但它没有起作用。为什么?
编辑
请注意 - 在您输入文件名的任何地方,进程替换都应该有效,比如说:
diff <(some command) <(another command)
上述代码中使用的是Bash。
diff /dev/fd/... /dev/fd/...
例如,在 grep
中,您可以使用以下命令:
grep -f <(command_for_produce_the_patterns) files..
同样地,bash
在内部使用这个作为
grep -f /dev/fd/63 files....
所以,同样的应该适用于文件
file -f <(command)
<(cmd)
和$(cmd)
之间的区别吗?如果是,你就知道这不是一个解决方案。而且,想象一下,如果文件名包含空格会发生什么... - cajwinefind ... | file -f -
,还有至少两种其他方法。;) 但问题的价值在于“为什么进程替换不起作用?”(我已经得到了被接受的答案 :))无论如何,感谢您的关注。 - cajwine