如何用输出重定向和替换输入文件(执行"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")

查看:35
本文介绍了如何用输出重定向和替换输入文件(执行"cat myfile>myfile&qot;时不要擦除myfile)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

重定向到用作输入的文件并替换该文件(而不是擦除该文件)的正确方法是什么? 我想做一些类似的事情:

cat myfile > myfile

其中程序(即cat)读取文件,然后重定向到该文件,因此在上面的示例中myfile将保持不变。

我知道上面的示例将擦除文件as explained here

要替换而不是擦除该文件,正确的语法是什么?是否可以执行标准输出和重定向,或者程序是否应该处理打开新数据并将其写入文件?我希望让我的程序将输出发送到stdout,然后用户可以重定向或通过管道等方式。

顺便说一下,我不想>>(合并)。我希望左侧的函数将新数据写入文件--替换文件内容。

也许更好的说法是,我希望重定向的左侧在流发生之前完全发生--这可能吗?我是否对bash有根本的误解?

推荐答案

您必须先将所有数据读取到内存,或者写入临时文件并将其换出。

将其读取到内存中(像vimed和其他编辑器一样):

contents=$(<myfile)
cat <<< "$contents" > myfile

创建临时文件(如sed -irsync等更新工具):

tmpfile=$(mktemp fooXXXXXX)
cat myfile > "$tmpfile" && mv "$tmpfile" myfile

这篇关于如何用输出重定向和替换输入文件(执行&quot;cat myfile&gt;myfile&qot;时不要擦除myfile)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆