“exit”在哪里定义?

“exit”在哪里定义?

假设我想要一个 bash 命令来做一些额外的事情。作为一个简单的例子,假设我只想让它在运行之前回显“123”。

一种简单的方法是为命令添加别名。由于我们仍然需要原始文件,因此我们可以通过其确切路径来引用它,我们可以使用 找到它which。例如:

$ which rm
/bin/rm
$ echo "alias rm='echo 123 && /bin/rm'" >> .bashrc

这很容易,因为我能够查找rm使用which.

然而,我正在尝试用 来做到这一点exit,并且which似乎对此一无所知。

$ which exit
$ echo $?
1

该命令没有输出路径,实际上它返回一个非零退出代码,which当命令不在$PATH.

我想这可能是一个函数,但显然情况也不是这样:

$ typeset -F | grep exit
$ echo $?
1

因此,该exit命令没有在任何地方定义为函数或命令$PATH,但是,当我键入 时exit,它会关闭终端。所以它显然是在某个地方定义的,但我不知道在哪里。

它在哪里定义,如何显式调用它?

答案1

exit是一个外壳特殊内置命令。它是建成有了shell解释器,shell就知道它,并且可以直接执行它,而无需到处搜索。

在大多数 shell 上,您可以使用:

$ type exit
exit is a shell builtin

您必须阅读 shell 的源代码才能了解其内置功能是如何实现的,这里是源代码的链接bash退出内置

使用bash, zsh, ksh93, mksh, pdksh, 要exit显式调用内置命令,请使用builtin内置命令:

builtin exit

如何显式调用内置的 shell?更多细节。

答案2

exit是 shell 的命令,因此任何 shell - 例如bashksh具有此命令

答案3

该命令exit属于 bash 的内部。您可以使用它来寻求帮助:

$ help exit

这只是表明exitshell 已知,但是:它是什么?:

$ type -a exit
exit is a shell builtin

它不会作为外部文件或程序被发现,它不存在于 shell 之外。

运行这个:LESS=+/'^ *exit \[n\]' man bash找到这个:

exit [n] 导致 shell 退出,状态为 n。如果省略 n,则退出状态为最后执行的命令的状态。 EXIT 上的陷阱在 shell 终止之前执行。

也是定义为 POSIX 内置函数

要在代码中显式调用它,请使用以下命令:

builtin exit

相关内容