如果我通过 ssh 连接到这两台服务器,我可以根据我所在的服务器类型为它们设置不同的颜色吗?
是的。
我的基本解决方案需要一个包装器ssh(这可能是一个 shell 函数或一个脚本),以及一个额外的帮助程序脚本。
包装函数应该是这样的:
ssh() {
helper="$HOME/bin/_ssh_tmux_background"
command ssh \
-o PermitLocalCommand=yes \
-o LocalCommand="'$helper' '%h'" \
"$@"
"$helper"
}
Run Code Online (Sandbox Code Playgroud)
这是帮助程序脚本:
#/bin/sh
[ -z "$TMUX_PANE" ] && exit
style=default
case "$1" in
prod_* )
style='bg=red'
;;
dev_* )
style='bg=blue'
;;
esac
tmux select-pane -P "$style" -t "$TMUX_PANE"
Run Code Online (Sandbox Code Playgroud)
保存$helper函数指向的脚本($HOME/bin/_ssh_tmux_background在我的代码中),使其可执行。
现在,如果您调用,该函数将运行带有两个附加选项的ssh实际命令:和(有关详细信息,请参阅)。这样,您一登录到远程主机,就可以使用远程主机名作为唯一参数来运行帮助程序脚本。sshPermitLocalCommandLocalCommandman 5 ssh_config
如果您处于tmux,脚本将继承TMUX_PANE环境变量。如果在 之外,脚本将立即退出tmux,因此即使您在没有 的情况下使用该函数,它也不会干扰tmux。
该脚本将远程主机名与您的前缀进行匹配,并为tmux. 您不限于case,您可以按照您想要的任何方式构建逻辑(包括与 匹配的正则表达式[[,但您需要bash更改 shebang)。最后应用样式。
退出后ssh,该函数将不带参数调用脚本。"$1"计算结果为一个空字符串,与我们的任何模式都不匹配,因此默认样式default被传递给tmux.
请注意,您可以在或 in 中指定PermitLocalCommandand 。不过,您无法如此轻松地摆脱包装器,因为您需要在退出后再次更改背景颜色。LocalCommand/etc/ssh/ssh_config~/.ssh/configssh
仍然可能需要无包装解决方案。想象一个脚本(用 调用LocalCommand)检索其父级(ssh的)PID,分叉到后台(如此ssh继续),监视 PID 并在退出tmux后恢复设置ssh。此类脚本可能会保存窗格的原始样式(无论它是什么),并在以后恢复它,而不是使用该default样式。
我们开始做吧。这是我的尝试:
#/bin/sh
[ -z "$TMUX_PANE" ] && exit
[ "$#" -eq 1 ] || exit 1
newstyle="$1"
oldstyle="$(tmux select-pane -g -t "$TMUX_PANE")"
tmux select-pane -P "$newstyle" -t "$TMUX_PANE"
( tail --pid="$PPID" -f /dev/null
tmux select-pane -P "$oldstyle" -t "$TMUX_PANE" ) &
Run Code Online (Sandbox Code Playgroud)
新脚本(例如$HOME/bin/_ssh_tmux_style)也应该是可执行的。它使用的tail --pid是不可移植的;请参阅此问题以获取替代方法。
现在我们不需要旧的包装函数(因此启动一个新的 shell 或unset -f ssh)。我们所需要的只是~/.ssh/config. 记得man 5 ssh_config说:
由于使用每个参数的第一个获得的值,因此应在文件开头附近给出更多特定于主机的声明,并在末尾给出一般默认值。
考虑到这一点,将以下内容放在您的正确位置~/.ssh/config:
Host prod_*
PermitLocalCommand=yes
LocalCommand="$HOME/bin/_ssh_tmux_style" 'bg=red'
Host dev_*
PermitLocalCommand=yes
LocalCommand="$HOME/bin/_ssh_tmux_style" 'bg=blue'
Run Code Online (Sandbox Code Playgroud)
双引号很重要。请注意,整个附加配置(样式)现在已嵌入到ssh. 让你的$PATH容器$HOME/bin变得更好:
LocalCommand=_ssh_tmux_style 'bg=red'
Run Code Online (Sandbox Code Playgroud)
我觉得它很优雅。
| 归档时间: |
|
| 查看次数: |
2362 次 |
| 最近记录: |