如何使用自己的 .bash_logout 文件执行 bash(在脚本中)?

如何使用自己的 .bash_logout 文件执行 bash(在脚本中)?

我想在子 shell 中执行 bash,当用户从子 shell 退出时,我想执行一些其他命令(例如将日志保存到文件)。

像这样的东西:

运行.sh:

#!/bin/bash 

function save_information_to_file()
{
    echo "${date} ${time} new bash subshell ended !"
}
# Some commands etc.

env PS1='SubShell:' bash --rcfile /home/username/.bashrc

if [ user_logout_from_subshell ]
then 
     save_information_to_file()
fi;

执行:

user: ./run.sh
2016-08-12 14:55:13 new bash subshell started...
SubShell: echo "wow..."
wow... 
SubShell: pwd
/home/username
SubShell: cat user.log
2016-08-11 17:54:32 bash started
2016-08-11 17:56:14 bash ended
2016-08-11 18:23:18 bash started
2016-08-11 18:39:30 bash ended
SubShell: exit
exit
2016-08-12 14:59:41 new bash subshell ended !
user:

如何使用退出时必须执行的文件路径运行 bash?

答案1

你不需要任何特殊的技巧。这就够了:

#!/bin/bash 

env PS1='SubShell:' bash --rcfile /home/username/.bashrc

echo Subshell exited. Now doing something...

子 shell 将在主终端中运行。主脚本将等待它完成,无需任何额外的命令。

(我不知道如何PS1从 shell 上面进行设置。我猜它会在子 shell Bash 启动时被覆盖。)

答案2

我的第一个想法也是 .bash_logout,但这只适用于登录 shell。最直接的方法(适用于登录 shell 和非登录 shell)是在退出时设置陷阱。它的工作原理如下:

陷阱“your_commands_go_here”退出

例如, $ bash $ trap "echo goodbye cruel world!" EXIT $ exit exit goodbye cruel world!

答案3

每个用户的主目录下都有一个名为.bash_logout的文件,尝试在其中插入您想要的命令。

答案4

您的主目录中可能不存在 .bash_logout。我过去也遇到过这种情况。如果是这种情况,只需 vi/vim 并在主目录中创建您自己的 .bash_logout 文件,这应该可以解决问题。

相关内容