![如何在通过 ssh 连接到远程服务器时在 Fish shell 中自动启动 tmux](https://linux22.com/image/51906/%E5%A6%82%E4%BD%95%E5%9C%A8%E9%80%9A%E8%BF%87%20ssh%20%E8%BF%9E%E6%8E%A5%E5%88%B0%E8%BF%9C%E7%A8%8B%E6%9C%8D%E5%8A%A1%E5%99%A8%E6%97%B6%E5%9C%A8%20Fish%20shell%20%E4%B8%AD%E8%87%AA%E5%8A%A8%E5%90%AF%E5%8A%A8%20tmux.png)
我从外壳切换bash
到fish
外壳。我喜欢它并决定也在我的服务器上使用它。如何tmux
在连接时自动启动ssh
?我跟着这bash 的指令,但fish
shell 不同,如果不进行基本重写,这个方法就不起作用。
答案1
我重写了剧本。最棘手的部分是ssh
通过退出来断开连接,fish
因为exit
内部./.config/fish/config.fish
不起作用。
tmux
仅当 的父级fish
是时才开始ssh
。
这是我的文件的一部分./.config/fish/config.fish
:
if status --is-login
set PPID (echo (ps --pid %self -o ppid --no-headers) | xargs)
if ps --pid $PPID | grep ssh
tmux has-session -t remote; and tmux attach-session -t remote; or tmux new-session -s remote; and kill %self
echo "tmux failed to start; using plain fish shell"
end
end
更可读的版本可以在我的其他问题中找到(感谢可笑的鱼,《鱼壳》作者):如何在 Fish shell 中使用布尔值?
答案2
屏部,一个基于 tmux 的终端多路复用器,提供自动启动功能。
答案3
在以下位置创建 .fish 文件.config/fish/conf.d
:
if status --is-interactive
echo server is interactive
if set -q SSH_CONNECTION[1]; and set -q SSH_CLIENT[1]; and set -q SSH_TTY[1]; or pstree -p | grep "sshd.*\($fish_pid\)"; and not set -q TMUX
tmux new -AD -t remote -s remote
end
end
如果您的本地计算机也有 tmux 会话,那么您必须使用++CTRL与远程会话分离。更多细节B CTRLB D这里。要了解我们为什么-AD
在 tmux 命令中使用,请检查这里。
聚苯乙烯只是为了明确接受的答案,通常 Fish 不会设置为登录 shell。因此,在 ssh 之后,我们运行fish
.在这种情况下PPID
是bash
和不是ssh
。