如何用输出重定向和替换输入文件(执行";cat myfile>;myfile&qot;时不要擦除myfile) [英] How to redirect and replace the input file with the output (don't erase myfile when doing "cat myfile > myfile")
本文介绍了如何用输出重定向和替换输入文件(执行";cat myfile>;myfile&qot;时不要擦除myfile)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
cat myfile > myfile
其中程序(即cat
)读取文件,然后重定向到该文件,因此在上面的示例中myfile
将保持不变。
我知道上面的示例将擦除文件as explained here。
要替换而不是擦除该文件,正确的语法是什么?是否可以执行标准输出和重定向,或者程序是否应该处理打开新数据并将其写入文件?我希望让我的程序将输出发送到stdout,然后用户可以重定向或通过管道等方式。 顺便说一下,我不想>>
(合并)。我希望左侧的函数将新数据写入文件--替换文件内容。
也许更好的说法是,我希望重定向的左侧在流发生之前完全发生--这可能吗?我是否对bash有根本的误解?
推荐答案
您必须先将所有数据读取到内存,或者写入临时文件并将其换出。
将其读取到内存中(像vim
、ed
和其他编辑器一样):
contents=$(<myfile)
cat <<< "$contents" > myfile
创建临时文件(如sed -i
、rsync
等更新工具):
tmpfile=$(mktemp fooXXXXXX)
cat myfile > "$tmpfile" && mv "$tmpfile" myfile
这篇关于如何用输出重定向和替换输入文件(执行";cat myfile>;myfile&qot;时不要擦除myfile)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文