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

为什么rm-f要求我确认zsh?,zsh,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,也会出现

我是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内部是否存在试图太聪明的东西?

似乎
rmu STAR\u SILENT
实际上是而不是
您可以在命令行或~/.zshrc中执行
setopt rmstarsilent
,告诉zsh不要确认
rm*

shell选项
RM\u STAR\u SILENT
是:

在执行
rm*
rm path/*
之前,不要查询用户

--


如果您想使
setopt
仅在该shell函数中暂时生效,则可以将其与以下类似功能结合使用:

我的测试(){
setopt localoptions rmstarsilent
...
}

您的.zshrc:alias rm='rm-i'中是否存在此别名?只需将alias键入checkNo,正如您在我的帖子中看到的,我同时使用了“type”和“command”如果它们是别名,则“type”将显示,而“command”将绕过它。另外请注意,确认问题不是来自rm,而是来自zsh,正如我们可以从措辞中得出的结论。而且它不会删除我的文件。等待并按y键。感谢您添加有关
localoptions
的信息!这正是我所需要的。我喜欢这个功能,除了在我清除日志文件的特定功能中,我不想被提示!我还不清楚如何在没有提示的情况下调用rm命令。顺便问一下,上面的代码是用哪种语言编写的?如何使此更改永久化?每次启动新shell时都需要这样做。要在本地使用,只需在终端中运行
setopt localoptions rmstarsilent
。要使其永久化,请将该行添加到
~/.zshrc
并重新加载终端。答案中的示例显示了如何在shell函数中使用它。