Как выполнить сложные команды при установлении соединения с mosh?

С помощью SSH я могу сделать это:

ssh REMOTE -t 'tmux a || tmux'

С mosh лучшее, что я могу сделать, это:

mosh REMOTE -- tmux a

Но это не сработает:

mosh REMOTE -- tmux a || tmux

Это не так: (не важно, одинарная или двойная кавычка, я пробовал оба)

mosh REMOTE -- 'tmux a || tmux'

Итак, мой вопрос: как я должен делать эту работу?

3 ответа

Решение

Что ж, похоже, что я должен явно использовать оболочку для выполнения команды:

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

РЕДАКТИРОВАТЬ

Вместо того чтобы делать tmux a || tmuxлучше добавить new-session в ~/.tmux.conf и просто беги tmux, Это сделало бы все намного проще. Я могу сделать такие вещи сейчас:

mosh REMOTE -- 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, это было бы замечательно, но я не мог бы решить это.

Поместите это в конец вашего .bashrc

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

Если звонит mosh-server, bashвыполнит все, что найдет в $HOME/.moshrc- поэтому просто поместите свои команды в файл с именем .moshrcв вашем домашнем каталоге.

Поскольку mosh вызывает оболочку входа в систему, у вас должна быть строка

      source .bashrc

в вашем , или поместите вышеуказанные строки в .bash_profile.

Другие вопросы по тегам