7

使用 ssh 我可以做到这一点:

ssh REMOTE -t 'tmux a || tmux'

使用 mosh 我能做的最好的事情是:

mosh REMOTE -- tmux a

但这不起作用:

mosh REMOTE -- tmux a || tmux

这个也不行:(不管是单引号还是双引号,我都试过了)

mosh REMOTE -- 'tmux a || tmux'

所以,我的问题是:我应该如何做这份工作?

4

3 回答 3

18

好吧,看来我必须明确使用shell来执行命令:

mosh REMOTE -- sh -c 'tmux a || tmux'

编辑

而不是这样做tmux a || tmux,更好的方法是添加new-session~/.tmux.conf运行tmux。那会让事情变得容易得多。我现在可以做这样的事情:

mosh REMOTE -- tmux

惊人的!

于 2014-04-10T05:51:36.810 回答
3

可能有比上面给出的示例更复杂的命令。我想创建一个命令,如果一个现有的 tmux 会话存在但尚未附加,或者如果没有可用的,则重新附加到现有的 tmux 会话。

看看这个例子,我会做这样的事情:

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 做到这一点,那就太好了,但我似乎无法解决这个问题。

于 2015-04-02T15:21:52.970 回答
0

把它放在你的最后.bashrc

s1="`ps $PPID|grep mosh|awk '{print $5}'`"
s2=mosh-server
if [[ "$s1" == "$s2" ]]; then source .moshrc; fi

如果由 调用mosh-serverbash将执行它在其中找到的任何内容- 所以只需将您的命令放在您的主目录中$HOME/.moshrc命名的文件中。.moshrc

因为 mosh 调用了一个登录 shell,所以你应该有一行

source .bashrc

在你的.bash_profile,或者把上面的行放在.bash_profile.

于 2021-01-29T07:41:46.850 回答