当我这样做my_script < filename.txt > filename.txt
时,文件将被覆盖并截断。
在 Unix 命令行上是否有某种方法可以指定重定向不是同时进行的,即在输入完成之前输出不会开始?
我正在尝试编写一个读取文件的实用程序,并根据命令行选项重新生成并覆盖它。我意识到我可以在程序中添加不使用标准输入/标准输出的支持,但我喜欢重定向的灵活性和便利性。
当我这样做my_script < filename.txt > filename.txt
时,文件将被覆盖并截断。
在 Unix 命令行上是否有某种方法可以指定重定向不是同时进行的,即在输入完成之前输出不会开始?
我正在尝试编写一个读取文件的实用程序,并根据命令行选项重新生成并覆盖它。我意识到我可以在程序中添加不使用标准输入/标准输出的支持,但我喜欢重定向的灵活性和便利性。
你可以这样做:
例如:
它打开
foo
以供阅读。然后它启动一个子shell,并foo
在保持文件打开的同时删除 i 节点。最后它打开foo
输出,从而创建foo
.它需要对目录的写权限,所以如果你只有文件的写权限,你就不走运了。
它将更改 i-node(因此权限、所有者、ctime 丢失),但如果只有名称很重要,应该没问题。
与
sponge
此相反,即使输出yourprogram
大于内存也有效。可以将文件读入此处的字符串缓冲区,然后覆盖同一文件(shell bash):