将stdin重定向到脚本中的tempfile

时间:2016-06-03 17:55:05

标签: linux bash pipe

我想写一个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 . …),但使用管道对我来说会更自然。

2 个答案:

答案 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

-print0find打印由NUL(\0)分隔的每个找到的文件,而-0将使xargs读取由相同的每行分隔。

如果您想传递可以使用process substitution的文件,请选择

% echo <(ls)
/dev/fd/63

在你的情况下:

qiv -fm -F <(my_command)

或者从stdin阅读:

qiv -fm -F <(cat)