bash 和 oh-my-zsh 之间的不同 rm -f 行为

Different rm -f behavior between bash and oh-my-zsh

我正在使用 oh-my-zsh。我有以下两个关于 rm command get sourced 的别名:

alias rm='rm -i'  

function clean_tex_mid_file()
{
    rm -f *.dvi *.log *.synctex.gz *.aux
}
alias cleantex='clean_tex_mid_file'

我发现当我尝试使用上面定义的 cleantex 删除不存在的文件时,它会像 'no matches found: *.dvi' 一样抱怨,忽略 -f 选项。

更深入的测试显示 bash 将保持沉默尝试删除不存在的文件,寻找相同的别名文件。

那么如何处理这个问题以及背后发生了什么?

zsh,默认情况下,如果 运行ning 一个带有没有匹配项的 glob 的命令会失败。此行为违反了 POSIX sh 标准。

默认情况下,

bash 遵循 POSIX 标准,这需要将原始 glob 表达式传递给相关应用程序。因为指定 rm -f 来处理文件不存在的情况与成功删除该文件的情况相同,因此没有匹配项的 glob 表达式将被视为成功的情况。

要在 bash 上更改此行为,运行:

# tell bash to abort a command rather than passing it an unexpanded glob
shopt -s failglob