我想写一个bash脚本,它通过管道接收文件列表,写一个临时文件然后用这个临时文件启动一个程序(qiv - 一个图像查看器)。
示例:
find . -atime 2 | piped_qiv
其中piped_qiv看起来像这样:
#!/bin/bash
[receive file list through pipe] > /tmp/qiv_temp
qiv -fm -F /tmp/qiv_temp
rm /tmp/qiv_temp
我可能遗漏了一些关于bash脚本的非常基本的东西,但是我无法在这方面或谷歌找到这个问题的正确解决方案。
旁注:我知道我也可以使用qiv $(find . …)
,但使用管道对我来说会更自然。
答案 0 :(得分:3)
您需要一个程序将其标准输入写入标准输出:cat
。
#!/bin/bash
cat > /tmp/qiv_temp
qiv -fm -F /tmp/qiv_temp
rm /tmp/qiv_temp
答案 1 :(得分:3)
使用xargs:
find . -atime 2 -print0 | xargs -0 my_command
-print0
将find
打印由NUL(\0
)分隔的每个找到的文件,而-0
将使xargs读取由相同的每行分隔。
如果您想传递可以使用process substitution的文件,请选择
% echo <(ls)
/dev/fd/63
在你的情况下:
qiv -fm -F <(my_command)
或者从stdin阅读:
qiv -fm -F <(cat)