回答:
これをローカルマシンまたはリモートマシンで実行するかどうかは、質問では指定されていません。また、どちらのマシンにどのシェルが存在するかも指定されていないbashため、両方を想定しています。
リモートマシンで実行したい~/.bash_logout場合は、ログインシェルが正常にログアウトしたときに実行されるを見てください。からman bash:
ログインシェルが終了すると、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にログインシェルにすることができます。これ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.