覆盖与系统命令同名的用户定义函数

覆盖与系统命令同名的用户定义函数

此函数存在于我的一个用户的 ~/.bashrc 中:

function rm()
{
        ls $*
        echo "rm?"
        read ans
        if [ "$ans" == 'y' ]; then
                /bin/rm $*
        fi
}

在我需要用户运行的 ksh 脚本中,有一行这样的代码:

[[ "$KEEP" = "" ]] && \rm $FILE

虽然反斜杠可以转义用户定义的别名,但它不会阻止脚本运行具有相同名称的用户定义函数。因此,调用的是用户的 rm() 函数,而不是系统函数。

我发现超级用户问题问答,但解决方案仅适用于内置函数,而不是系统命令。

强制调用 rm 命令而不是别名或函数的最佳方法是什么?我必须指定 rm 的完整路径以及我想要确保正确执行的每个系统命令吗?还有更好的方法吗?

答案1

您可以使用command它来绕过正常的 bash 函数查找。

command rm

非破坏性示例:

$ alias which='which -s'
$ function which { echo "which $@?" ; }
$ which which
which -s which?
$ command which which
/usr/bin/which

或者,使用 来调用它env(在 上执行具有给定名称的第一个程序$PATH,或者通过指定完整路径)。

/usr/bin/env rm
/bin/rm

相关内容