我需要使用不支持它的程序就地修改文件。prog
prog $file > $file.temp
cat $file.temp > $file
rm $file.temp
Run Code Online (Sandbox Code Playgroud)
我想一步完成此操作,无需临时文件。这看起来不错,但行不通:
cat <(prog $1) > $1
Run Code Online (Sandbox Code Playgroud)
如果我有一种缓冲管道内容的方法(阻塞直到写入结束关闭),那么它会起作用,例如:
cat <(prog $1 | buffer_until_close) > $1
Run Code Online (Sandbox Code Playgroud)
我该如何做到这一点,或者以其他方式实现所需的语法?
如果我有一种缓冲管道内容的方法(阻塞直到写入结束关闭),那么它会起作用,例如:
cat <(prog $1 | buffer_until_close) > $1
不,不会的。stdout( )的重定向在任何程序启动之前>$1执行。一旦 shell 设置了重定向,它就会截断输出文件。
然而,正如评论中提到的,sponge将会起作用:
prog $1 | sponge $1
Run Code Online (Sandbox Code Playgroud)
sponge可以在moreutils软件包中找到,并且大多数 Linux 发行版都会预安装它。