关闭 SSH 连接后运行本地命令?

关闭 SSH 连接后运行本地命令?

我已经设定zsh每当我更改目录时更新 XTerm 标题。太棒了!不幸的是我有一个常见问题,即:

% cd foo;       # title changes to "host1:~/foo"
% ssh host2;    # title changes to "host2:~"
% pwd
/home/user/foo  # title is still "host2:~"

我需要在 ssh 连接终止时运行一些命令,可以是chpwd、 或cd .或类似命令。我认为我不能使用别名,因为我需要类似

alias ssh=ssh $*; cd .

但据我所知你无法选择争论的方向使用别名。

答案1

首先,需要说明的是:在zsh(顺便说一下,在bash& 朋友中也是如此)中,您不能在别名中使用参数。请改用函数:

# function hello() { echo $1 $3 } 
# hello one two three
one three

您可以在函数中更改标题chpwd(),每当您更改目录时都会调用该函数。因此,您需要使用cd .它来更新标题。或者——按照您的方法——在 ssh 会话结束后ssh,使用此函数“重载”命令以执行chpwd()

function ssh() { command ssh "$@"; chpwd }

我更喜欢的解决方案是将更改标题的命令放在precmd()提示显示之前执行的位置。例如,我在我的~/.zshrc

precmd () {
   [[ -t 1 ]] && print -Pn "\e]0;%n@%m:%~\a"
}

获得类似 的标题user@host:/current/dir,当连接到远程机器(假设 中有类似的代码~/.zshrc)并返回本地会话时,该标题会立即更新。

[[ -t 1 ]] 检查会话是否连接到终端——这并不那么重要。)

相关内容