如果我使用位于PATH中的二进制文件的名称命名bash脚本函数会发生什么?

时间:2011-08-23 08:25:23

标签: linux bash shell

假设我在bash脚本中编写了一个函数,其中包含可用二进制文件的名称,比如pwd:

function pwd(){
    echo '/'
}

好吧,这看起来有点奇怪,但问题是:如果在我的脚本中进一步编写命令会发生什么:

cd /usr
pwd

将使用pwd的内容?另外,我如何强制使用另一个?

3 个答案:

答案 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的内置关键字echocd等提供了类似功能。