假设我想要一个 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 - 例如bash
或ksh
具有此命令
答案3
该命令exit
属于 bash 的内部。您可以使用它来寻求帮助:
$ help exit
这只是表明exit
shell 已知,但是:它是什么?:
$ type -a exit
exit is a shell builtin
它不会作为外部文件或程序被发现,它不存在于 shell 之外。
运行这个:LESS=+/'^ *exit \[n\]' man bash
找到这个:
exit [n] 导致 shell 退出,状态为 n。如果省略 n,则退出状态为最后执行的命令的状态。 EXIT 上的陷阱在 shell 终止之前执行。
要在代码中显式调用它,请使用以下命令:
builtin exit