小编Gre*_*reg的帖子

重定向不是覆盖文件,而是生成一个空白文件

我有一个命令,它试图只读取一个文件,然后不加区别地注释掉其中的每一行,然后覆盖现有文件。

cat file | sed 's/^/#/g' > file
Run Code Online (Sandbox Code Playgroud)

但令我惊讶的是,这实际上并不起作用,实际上只是生成一个空白文件。根据我对管道的理解,这不应该发生,因为 stdout 转到 sed,由 sed 处理然后发送到文件。所以我想知道为什么会这样

代替我的预期行为,我实施了一种解决方法。

cat file | sed 's/^/#/g' > /tmp/file; mv /tmp/file file
Run Code Online (Sandbox Code Playgroud)

为什么我的原始解决方案不起作用?

shell

2
推荐指数
1
解决办法
1880
查看次数

标签 统计

shell ×1