ari*_*e64 14 command-line bash exit
有人可以解释该exit命令在 Unix 终端中的工作原理吗?
搜索man exit 并which exit没有帮助,我遇到了以下问题。
在我的新 Red Hat 系统上安装 Anaconda 和 PyCharm 的附加软件包后,我注意到每当我打电话exit退出终端会话时,我都会收到一系列错误,然后终端按预期退出。这些错误似乎表明我的调用exit正在触发调用rm ~/anaconda3/.../and rm ~/PyCharm/....,从而导致错误。所有目录似乎也是我为这些程序(即 numpy)下载的包的位置,见下文。
$ exit
rm: cannot remove ‘~/anaconda3/lib/python3.5/site-packages/numpy/core’: Is a directory
...
...
Run Code Online (Sandbox Code Playgroud)
解决
在我的~/.bash_logout文件中,有一行
find ~ -xdev ( -name *~ -o -name .*~ -o -name core ) -exec \rm '{}' \;
注释掉这一行停止了错误消息。它似乎搜索并删除所有临时文件。但它也会尝试查找其中包含“core”一词的目录,并将其也删除。这是系统中的预设。
rud*_*ier 25
man bash
Run Code Online (Sandbox Code Playgroud)exit [n] [...] A trap on EXIT is executed before the shell terminates.
此类陷阱通常用于在退出时清理 tmpfile,请参阅 /sf/ask/48091011/
定义这样的退出陷阱(以便在新 shell 中进行更好的测试):
$ bash
$ trap "rm filetodelete" EXIT
Run Code Online (Sandbox Code Playgroud)
显示定义的 EXIT 陷阱:
$ trap -p EXIT
trap -- 'rm filetodelete' EXIT
Run Code Online (Sandbox Code Playgroud)
测试:
$ exit
rm: cannot remove ‘filetodelete’: No such file or directory
Run Code Online (Sandbox Code Playgroud)
请注意,它exit也可能被隐式地“调用”。所以代替exit你也可以触发陷阱kill -HUP $$。
mik*_*sey 20
通常,如果您手动配置了它,您只会在退出 shell 时看到执行。但也许您安装的其中一个软件包附带了 bash 退出 shell 脚本...
查看;
~/.bash_logout
也许你会从那里找到一个脚本调用,这是一个奇怪的调用......
Sté*_*las 10
该exit命令是shell 中一个特殊的内置命令。它必须是内置的,因为它需要退出 shell 进程。
如果有任何或最后一个命令的退出状态,它会以退出状态退出 shell。
退出时,shell 将运行EXIT陷阱(如果有)。查看trap当前设置的(在类似 Bourne 的 shell 中)的输出。
由于许多炮弹,如果(有些系统/用户配置终端仿真程序来启动登录shell)的外壳被调用作为登录shell,它也将运行存储在特殊文件中的代码一样~/.logout,~/.zlogout,~/.bash_logout并有可能在相应的那些/etc依赖于壳.
您可以set -x在调用之前执行 aexit以了解这些命令的运行位置。