如果从特定目录退出,是否在注销脚本中执行代码?

3 bash shell-script logout

我在许多不同的机器上都有帐户,用于测试我贡献的几个库。有些机器归其他人所有(比如 GCC 编译农场),我想让它们保持整洁。

我想设置一个.bash_logout脚本,执行一个make cleanexit ,如果我在一个特定的目录。目录要求从多个 SSH 会话中消失。如果我在一个会话中构建/测试,我不希望单独的会话注销清理工件。即,exit$HOME/libfoo执行清洁;而exitfrom$HOME没有。

我了解基础知识,但我不清楚这有多强大:

# $HOME/.bash_logout

if [ "$PWD" = "$HOME/libfoo" ]; then
    make clean 1>/dev/null 2>&1
fi
Run Code Online (Sandbox Code Playgroud)

$PWD注销时使用是否有问题?还有其他我可能遗漏的问题吗?

小智 5

您是否打算仅在注销时执行脚本?
从人bash:

当登录 shell 退出时,bash 从文件 ~/.bash_logout(如果存在)读取并执行命令。

仅在 bash 登录 shell 退出时。


如果您打算在每个 shell 关闭时运行脚本,请使用 trap(请参阅 man bash):

trap /u1/myuser/on_exit_script.sh EXIT
Run Code Online (Sandbox Code Playgroud)

将它添加到 .bashrc 或其他适合您的文件。


此外,由于脚本将在退出时执行,因此 $PWD 将在退出时处于活动状态,这可能与 shell 启动时相同,也可能不同。如果您需要在退出时使用的 $PWD 上做一些事情,那么是的,这个测试:

if [ "$PWD" = "$HOME/libfoo" ]; then
Run Code Online (Sandbox Code Playgroud)

应该管用。