我需要使用不支持它的程序prog
修改就地文件。
prog $file > $file.temp
cat $file.temp > $file
rm $file.temp
我想在没有临时文件的情况下一步完成此操作。这看起来不错,但不会起作用:
cat <(prog $1) > $1
如果我有办法缓冲管道内容(阻塞直到写入结束),会工作,例如:
cat <(prog $1 | buffer_until_close) > $1
我该怎么做,或者用其他方式实现所需的语法?
答案 0 :(得分:4)
不,它不会。在任何程序启动之前,如果我有一种缓冲管道内容的方法(阻塞直到写入结束),它会起作用,例如:
cat <(prog $1 | buffer_until_close) > $1
stdout
(>$1
)的重定向是在之前执行的。一旦shell设置了重定向,它就会截断输出文件。
但是,正如评论中所提到的,sponge
将起作用:
prog $1 | sponge $1
在sponge
包中找到 moreutils
,大多数Linux发行版都会预先安装它。