假设我想要一个 bash 命令来做一些额外的事情。作为一个简单的例子,想象一下我只是想让它在运行前回显“123”。
一种简单的方法是为命令添加别名。由于我们仍然需要原始文件,我们可以通过它的确切路径来引用它,我们可以使用which
. 例如:
$ which rm
/bin/rm
$ echo "alias rm='echo 123 && /bin/rm'" >> .bashrc
Run Code Online (Sandbox Code Playgroud)
这很容易,因为我能够查找rm
使用which
.
但是,我正在尝试使用 来执行此操作exit
,并且which
似乎对此一无所知。
$ which exit
$ echo $?
1
Run Code Online (Sandbox Code Playgroud)
该命令没有输出路径,实际上它返回了一个非零退出代码,which
当命令不在$PATH
.
我想也许这是一个函数,但显然事实并非如此:
$ typeset -F | grep exit
$ echo $?
1
Run Code Online (Sandbox Code Playgroud)
因此,该exit
命令并未在任何地方定义为函数或 中的命令$PATH
,但是,当我键入 时exit
,它会关闭终端。所以它显然是在某处定义的,但我不知道在哪里。
它在哪里定义,我如何明确调用它?
exit
是一个 shell特殊的内置命令。它是用 shell 解释器构建的,shell 知道它并且可以直接执行它而无需搜索任何地方。
在大多数 shell 上,您可以使用:
$ type exit
exit is a shell builtin
Run Code Online (Sandbox Code Playgroud)
您必须阅读 shell 的源代码以查看其内置函数是如何实现的,这里是bash
exit builtin源代码的链接。
使用bash
, zsh
, ksh93
, mksh
, pdksh
,exit
显式调用builtin
内置命令,使用内置命令:
builtin exit
Run Code Online (Sandbox Code Playgroud)
请参阅如何显式调用内置的 shell?更多细节。