在脚本中将 stdin 重定向到临时文件



我想编写一个 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将使 xarg 读取由相同分隔的每一行。

如果要

传递文件,可以使用进程替换

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

在您的情况下:

qiv -fm -F <(my_command)

或者从标准阅读:

qiv -fm -F <(cat)

您需要一个将其标准输入写入标准输出的程序:cat .

#!/bin/bash
cat > /tmp/qiv_temp
qiv -fm -F /tmp/qiv_temp
rm /tmp/qiv_temp

相关内容

  • 没有找到相关文章

最新更新