可能的重复:
Shell 编程,避免临时文件
假设我有文件data.txt和命令cmd。
cmd接受一个参数,一个文件。或者,您可以使用stdin.
现在, saydata.txt是大写的,但cmd只有在所有数据都是小写的情况下才有效。
当然,你可以这样做
tr '[:upper:]' '[:lower:]' < data.txt > lowercase_data.txt
cmd lowercase_data.txt
rm lowercase_data.txt
Run Code Online (Sandbox Code Playgroud)
但是,有没有办法整合这个?
就像,原始文件的包装器,应用过滤器,然后传递对临时文件的引用;命令被执行;最后,临时文件被删除了?
我用 zsh。
zsh支持进程替换,它应该可以满足您的要求:
A command of the form =(...) is replaced with the name of a file containing its output.
Run Code Online (Sandbox Code Playgroud)
因此,对于您的示例,为了避免手动创建临时文件以将输出传递tr到 into cmd,您可以说
cmd =(tr '[:upper:]' '[:lower:]' < data.txt)
Run Code Online (Sandbox Code Playgroud)
对于其他外壳,等效项是:
bash: cmd <(tr '[:upper:]' '[:lower:]' < data.txt)ksh: cmd <(tr '[:upper:]' '[:lower:]' < data.txt)rc: cmd <{tr '[:upper:]' '[:lower:]' < data.txt}需要注意的是bash,ksh和rc使用命名管道,而不是临时文件,实现进程替换zsh使用,并要求/dev/fd/文件系统安装