Как выполнить сложные команды при установлении соединения с 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
.