使用重定向替换文件时请求确认

non*_*one 5 bash io-redirection alias

我是一个粗心的终端驱动程序,害怕不小心删除文件,因此使用了一些别名,例如alias rm='rm -i'for rm, mv, cp。我怎样才能获得类似的文件重定向确认行为(例如echo "I'm silly" > very_important_file.txt)。

常见的情况是我通常使用 replace ( >) 而不是 append ( >>),所以我最终不小心删除了一些中间重要的文件。你有什么建议?

Lev*_*von 6

我认为没有办法获得 的确切行为-i,但我已经noclobber设置了防止覆盖现有文件的方法。

有关使用示例,请参阅此页面

您可以尝试这样的命令(如果您喜欢,请将其包含在您的启动文件中)

$ set -o noclobber
Run Code Online (Sandbox Code Playgroud)

例子:

$ ls > ls.out
$ set -o noclobber
$ ls > ls.out
bash: ls.out: cannot overwrite existing file
$
Run Code Online (Sandbox Code Playgroud)

更新

作为@jsbillings下面有帮助的评论提到,要覆盖noclobberbash一个可以使用>|

由于我主要使用tcshcsh变体),因此覆盖运算符是>!

  • 如果您设置了 `noclobber`,并且您确实希望在不更改设置的情况下破坏文件,那么 bash 有一个忽略 noclobber 设置的 `>|` 重定向。 (2认同)