acm*_*acm 14 bash alias ksh bashrc
这个函数存在于我的一个用户的 ~/.bashrc 中:
function rm()
{
ls $*
echo "rm?"
read ans
if [ "$ans" == 'y' ]; then
/bin/rm $*
fi
}
Run Code Online (Sandbox Code Playgroud)
在我要求用户运行的 ksh 脚本中,我有这样一行:
[[ "$KEEP" = "" ]] && \rm $FILE
Run Code Online (Sandbox Code Playgroud)
虽然反斜杠转义用户定义的别名,但它不会阻止脚本运行具有相同名称的用户定义函数。结果,我的用户的 rm() 函数被调用而不是系统函数。
我发现了这个超级用户问题问题和回复,但该解决方案仅适用于内置函数,而不适用于系统命令。
强制调用 rm 命令而不是别名或函数的最佳方法是什么?我是否必须指定 rm 的完整路径以及我想确保正确执行的每个系统命令?有没有更好的办法?
Dan*_*eck 13
您可以使用command
来规避正常的 bash 函数查找。
command rm
Run Code Online (Sandbox Code Playgroud)
非破坏性示例:
$ alias which='which -s'
$ function which { echo "which $@?" ; }
$ which which
which -s which?
$ command which which
/usr/bin/which
Run Code Online (Sandbox Code Playgroud)
或者,使用env
(在 上执行具有给定名称的第一个程序$PATH
,或通过指定完整路径来调用它。
/usr/bin/env rm
/bin/rm
Run Code Online (Sandbox Code Playgroud)