2014-04-10 64 views
6

對於ssh我可以這樣做:如何在建立mosh連接時運行復雜的命令?

ssh REMOTE -t 'tmux a || tmux' 

隨着狂舞我能做的最好的是這樣的:

mosh REMOTE -- tmux a 

但是,這是行不通的:

mosh REMOTE -- tmux a || tmux 

無論這是否:(不管是單引號還是雙引號,我都試過)

mosh REMOTE -- 'tmux a || tmux' 

所以,我的問題是:我該怎麼做這份工作?

回答

12

嗯,看來我必須明確地使用shell執行命令:

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

編輯

而不是做tmux a || tmux的,更好的辦法是增加new-session~/.tmux.conf並運行tmux。這會讓事情變得更容易。我現在可以做這樣的事情:

mosh REMOTE -- tmux 

太棒了!

+0

我認爲你想在第二個解決方案中是'最偏遠的 - tmux a',否則每次都會創建一個新的會話,而不是附加到已經存在的會話。 – Mortimer

+1

你也可以'tmux new-session -A -s somenameforsession' – igor

2

可能會有比上面給出的示例更復雜的命令。我想創建一個重新連接到現有tmux會話(如果存在但尚未連接)的命令,或者在沒有可用連接的情況下創建新命令。上述

function tmosh() { 
    mosh $1 -- (tmux ls | grep -vq attached && tmux at -t $(tmux ls | grep -vm1 attached | cut -d: -f1)) || tmux new 
} 

但是,這並不工作,按照原來的問題:在this example

看,我會做這樣的事情。

我的解決方法到目前爲止是在主機服務器上的一個包裝腳本:

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做到這一點直接在WO解決方案很好,但我似乎無法解決這個問題。

相關問題