我想在子 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 文件,这应该可以解决问题。