linux - 将标准输入重定向到脚本中的临时文件

标签 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 . …) 但我觉得使用管道会更自然。

最佳答案

使用 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/

相关文章:

linux - 如何 tar fifo

linux - 为什么 tail 在这里不起作用?

c++ - 与具有重定向 I/O 的子进程通信时出现死锁

linux - 制作 bash 脚本以接受来自文件的输入或管道输出

用于检查互联网连接不工作的 Linux bash 脚本

linux - 在APACHE中的哪个.htaccess文件中(OS : Linux centos) server do i need to update

sql - 使用 MySQL 的 'KEY' 的重复条目 'PRIMARY'

c - 将 system() 的标准输出通过管道传输到其他 system() 的标准输入

macos - 找到 : -printf: unknown option

git - 用于验证 Git 标记或提交是否存在并已推送到远程存储库的 Bash/Shell 脚本函数