使用ssh我可以这样做:
ssh REMOTE -t 'tmux a || tmux'
我可以做的最好的事情是:
mosh REMOTE -- tmux a
但这不起作用:
mosh REMOTE -- tmux a || tmux
这两者都没有:(无论是单引号还是双引号都没关系,我都试过了)
mosh REMOTE -- 'tmux a || tmux'
所以,我的问题是:我该怎么做这个工作?
答案 0 :(得分:13)
好吧,似乎我必须明确地使用shell来执行命令:
mosh REMOTE -- sh -c 'tmux a || tmux'
修改强>
而不是tmux a || tmux
,更好的方法是将new-session
添加到~/.tmux.conf
,然后运行tmux
。这会让事情变得更容易。我现在可以这样做了:
mosh REMOTE -- tmux
真棒!
答案 1 :(得分:3)
可能会有比上面给出的示例更复杂的命令。我想创建一个命令,重新连接到现有的tmux会话(如果存在但尚未连接),或者如果没有可用则重新连接。
看this example,我会做这样的事情:
function tmosh() {
mosh $1 -- (tmux ls | grep -vq attached && tmux at -t $( tmux ls | grep -vm1 attached | cut -d: -f1 ) ) || tmux new
}
但根据上面的原始问题,这不起作用。
到目前为止,我的解决方案是在主机服务器上安装一个包装器脚本:
tmux-reattach-if-exists
简单地包含:
(tmux ls | grep -vq attached && tmux at -t $( tmux ls | grep -vm1 attached | cut -d: -f1 )) || tmux new
然后我使用mosh这样的客户端调用脚本:
function tmosh() {
mosh $1 -- tmux-reattach-if-exists
}
如果有一个解决方案可以通过.tmux.conf直接执行此操作,那将是很好的但我似乎无法解决这个问题。
答案 2 :(得分:0)
把它放在你的 vendor
.bashrc
如果由 s1="`ps $PPID|grep mosh|awk '{print $5}'`"
s2=mosh-server
if [[ "$s1" == "$s2" ]]; then source .moshrc; fi
调用,mosh-server
将执行它在 bash
中找到的任何内容 - 因此只需将您的命令放在您的主目录中名为 $HOME/.moshrc
的文件中。>
因为 mosh 调用登录 shell,所以你应该有一行
.moshrc
在您的 source .bashrc
中,或将以上几行放在 .bash_profile
中。