【发布时间】:2015-04-27 19:06:13
【问题描述】:
我在一个简单的管道中面临这种奇怪的行为:
me$ echo "AAA" > tmp.txt
me$ cat tmp.txt | sed 's/A/B/g' > tmp.txt
me$ cat tmp.txt
结果是一个空文件,而不是 tmp.txt 中所需的“BBB” 如果我选择不同的文件进行输出,它仍然有效。一些想法?提前谢谢!
【问题讨论】:
-
不是重复的 - 请参阅我的答案,它提供了一种不同的解决方案。
-
@La-comadreja,我不同意;该答案(写入并重命名)已已在 Etan 的另一篇文章中给出。
-
@La-comadreja, ...另外,如果(通常是case) 正在使用的目录可由其他用户写入(如
/tmp的情况)。在这种情况下,对同一目录进行写入的恶意用户可以创建指向他们无权访问但运行脚本的帐户可以访问的位置的符号链接,从而触发任意覆盖后一个帐户拥有的文件。 -
这也足以成为 BashPitfalls 列表中的常见问题解答:mywiki.wooledge.org/…