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

时间:2017-08-21 13:14:55

标签: linux bash alias zsh oh-my-zsh

我正在使用oh-my-zsh。我有两个关于rm命令的以下两个别名来源:

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将保持静默,尝试删除不存在的文件,并获取相同的别名文件。

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

1 个答案:

答案 0 :(得分:2)

默认情况下,如果运行带有不匹配的glob的命令,

zsh会失败。这种行为违反了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