我从外壳切换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
。