我想编写一个 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 . …)
但我觉得使用管道会更自然。
最佳答案
使用 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)
或者从标准输入读取:
qiv -fm -F <(cat)
关于linux - 将标准输入重定向到脚本中的临时文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37620707/