【问题标题】:Accidents with `echo >` and `echo >>`带有 `echo >` 和 `echo >>` 的事故
【发布时间】:2019-04-13 22:55:39
【问题描述】:

今天我在覆盖日志文件时了解了echo >echo >> 之间的区别。我不相信自己,我知道我会再次犯这个错误,除非我证明这个白痴。有没有办法做到这一点?

【问题讨论】:

  • 练习,更多练习,再更多练习——不要在不考虑你的意思的情况下编写 I/O 重定向。谨防使用set -o noclobber,然后过度使用>!;这违背了目标。
  • noclobber 是一种方式,但它可能会在未来引发更大的事故:当您在自己的环境中信任安全带并想帮助同事(或在另一个系统上或以 root 身份)时, 你又开始覆盖文件了。

标签: bash append overwrite io-redirection


【解决方案1】:

打开您的~/.bashrc 文件并将set -o noclobber 放在最后。

现在,无论何时在现有文件上调用 echo >,该文件都不会被覆盖,并且会出现错误消息:-bash: FILENAME: cannot overwrite existing file

请记住source ~/.bashrc 以使这些更改生效!

【讨论】:

  • 您可能会注意到,如果您设置了noclobber,则执行“echo 123 > xyz; echo 456 > xyz”将按预期在第二个生成错误。但是,有时您需要覆盖它。显然,你可以使用unset noclobber; echo 456 > xyz; set -o noclobber,但你也可以使用echo 456 >! xyz。不过要小心——如果你发现自己经常写>!,那么noclobber 真的没有帮助,你需要在工作时准确思考。
猜你喜欢
  • 2022-12-05
  • 1970-01-01
  • 2015-07-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-25
  • 1970-01-01
相关资源
最近更新 更多