Answers:
如果要在本地或远程计算机上执行此操作,则未在问题中指定。还没有指定哪个机器上存在哪个shell,因此我假设bash
两者都存在。
如果要在远程计算机上执行它,请查看~/.bash_logout
,当登录shell正常注销时执行。来自man bash
:
当退出登录shell时,bash从文件中读取并执行命令
~/.bash_logout
(如果存在)。
您可以进行测试~/.bash_logout
以检查是否注销的外壳程序是SSH会话,应该可以执行以下操作:
if [[ $SSH_CLIENT || $SSH_CONNECTION || $SSH_TTY ]]; then
# commands go here
fi
如果要在本地计算机上执行它,请在周围创建一个函数包装器ssh
。类似于以下内容的东西应该起作用:
ssh() {
if command ssh "$@"; then
# commands go here
fi
}
对于您的需求而言,这可能太简单了,但是您明白了。
您走在正确的轨道上。如果ssh
会话是登录外壳程序(而不是远程命令),bash
则将在退出外壳程序时提供来源/etc/bash.logout
和信息~/.bash_logout
。
如果要执行远程命令,则可以强制bash
成为登录shell。在LocalCommand
可能与此类似:
bash -l -c /execute/some/command
从 man 1 bash
-c string If the -c option is present, then commands are read from
string. If there are arguments after the string, they are assigned to
the positional parameters, starting with $0.
-l Make bash act as if it had been invoked as a login shell
When a login shell exits, bash reads and executes commands from the
files ~/.bash_logout and /etc/bash.bash_logout, if the files exists.