为什么 rm -f 要求我确认 zsh?

Why does rm -f ask me for confirmation on zsh?

我是来自 Cygwin 的 运行 zsh。我的一个 shell 函数包含一个语句

rm -f somedir/*

(我想删除 somedir 中的所有非隐藏文件,而不是目录本身)。然而,我总是被问到:

zsh: sure you want to delete all the files in ... [yn]?

这条消息的措辞(注意开头的"zsh:")表明问题来自zsh,而不是rm。但是,rm是一个外部命令:

$ type rm
rm is /usr/bin/rm

顺便说一句,如果我显式调用 rm as

,也会出现提示
$ command rm -f somedir/*

zsh 里面是不是有什么东西太聪明了?

RM_STAR_SILENT 似乎 NOT 有效。
您可以在命令行或 ~/.zshrc 中执行 setopt rmstarsilent 来告诉 zsh 不要确认 rm *.

shell选项RM_STAR_SILENT是:

Do not query the user before executing rm * or rm path/*.

-- zshoptions(1): RM_STAR_SILENT


如果您只想在 shell 函数中临时产生 setopt 效果,您可以将它与 localoptions 结合使用,如下所示:

my-test () {
  setopt localoptions rmstarsilent
  ...
}

您需要将目录somedir内所有文件和文件夹的权限递归设置为rw,然后执行:

sudo rm -rf somedir

Here's a video 我在 ZSH shell.

中为此命令成功使用了 sudo