假设我在bash脚本中编写了一个函数,其中包含可用二进制文件的名称,比如pwd:
function pwd(){
echo '/'
}
好吧,这看起来有点奇怪,但问题是:如果在我的脚本中进一步编写命令会发生什么:
cd /usr
pwd
将使用pwd
的内容?另外,我如何强制使用另一个?
答案 0 :(得分:9)
您的函数将被调用,因为它隐藏了pwd
内置函数。
要强制执行命令,请使用command
内置:
command pwd
来自bash手册:
command [-pVv] command [arg ...]
Run command with args suppressing the normal shell function
lookup. Only builtin commands or commands found in the PATH are
executed. If the -p option is given, the search for command is
performed using a default value for PATH that is guaranteed to
find all of the standard utilities. If either the -V or -v
option is supplied, a description of command is printed. The -v
option causes a single word indicating the command or file name
used to invoke command to be displayed; the -V option produces a
more verbose description. If the -V or -v option is supplied,
the exit status is 0 if command was found, and 1 if not. If
neither option is supplied and an error occurred or command can-
not be found, the exit status is 127. Otherwise, the exit sta-
tus of the command builtin is the exit status of command.
答案 1 :(得分:6)
功能优先。您可以使用type pwd
轻松查看。
考虑到pwd
是内置版,您可以使用builtin pwd
来实现真正的实现。
如果您想从系统中实际获取可执行文件,可以参考其路径,例如:使用$(which pwd)
。
答案 2 :(得分:0)
功能优先于路径搜索。使用完整路径以避免禁用该功能。 builtin
关键字为Bash的内置关键字echo
,cd
等提供了类似功能。