對於ssh我可以這樣做:如何在建立mosh連接時運行復雜的命令?
ssh REMOTE -t 'tmux a || tmux'
隨着狂舞我能做的最好的是這樣的:
mosh REMOTE -- tmux a
但是,這是行不通的:
mosh REMOTE -- tmux a || tmux
無論這是否:(不管是單引號還是雙引號,我都試過)
mosh REMOTE -- 'tmux a || tmux'
所以,我的問題是:我該怎麼做這份工作?
對於ssh我可以這樣做:如何在建立mosh連接時運行復雜的命令?
ssh REMOTE -t 'tmux a || tmux'
隨着狂舞我能做的最好的是這樣的:
mosh REMOTE -- tmux a
但是,這是行不通的:
mosh REMOTE -- tmux a || tmux
無論這是否:(不管是單引號還是雙引號,我都試過)
mosh REMOTE -- 'tmux a || tmux'
所以,我的問題是:我該怎麼做這份工作?
嗯,看來我必須明確地使用shell執行命令:
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
}
但是,這並不工作,按照原來的問題:在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解決方案很好,但我似乎無法解決這個問題。
我認爲你想在第二個解決方案中是'最偏遠的 - tmux a',否則每次都會創建一個新的會話,而不是附加到已經存在的會話。 – Mortimer
你也可以'tmux new-session -A -s somenameforsession' – igor