如何在通过 ssh 连接到远程服务器时在 Fish shell 中自动启动 tmux

如何在通过 ssh 连接到远程服务器时在 Fish shell 中自动启动 tmux

我从外壳切换bashfish外壳。我喜欢它并决定也在我的服务器上使用它。如何tmux在连接时自动启动ssh?我跟着bash 的指令,但fishshell 不同,如果不进行基本重写,这个方法就不起作用。

答案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.在这种情况下PPIDbash和不是ssh

相关内容