每当您通过 SSH 连接到远程计算机时,您都~/.ssh/config
可以使用该LocalCommand
指令执行本地命令。但是当我出口SSH 连接?当连接结束或关闭时,似乎不会获取 *.bashrc/.bash_profile* 文件。
答案1
问题中没有指定您是否希望在本地或远程计算机上执行此操作。也没有指定哪台机器上存在哪个 shell,因此我假设bash
两台机器上都存在。
如果您想在远程计算机上执行它,请查看~/.bash_logout
,它是在登录 shell 正常注销时执行的。从man bash
:
当登录 shell 退出时,bash 会从文件中读取并执行命令
~/.bash_logout
(如果存在)。
您可以进行测试~/.bash_logout
以检查注销的 shell 是否是 SSH 会话,如下所示应该可以工作:
if [[ $SSH_CLIENT || $SSH_CONNECTION || $SSH_TTY ]]; then
# commands go here
fi
如果您想在本地计算机上执行它,请创建一个函数包装器ssh
。像下面这样的东西应该有效:
ssh() {
if command ssh "$@"; then
# commands go here
fi
}
这对于您的需求来说可能太简单了,但您明白了。
答案2
你走在正确的轨道上。如果ssh
会话是登录 shell(而不是远程命令),bash
则会在退出 shell 时/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.