題 tmux相當於“screen -R”?


tmux attach 命令行為更像是一種組合 screen -r 和 screen -x  - 首先它試圖附加到最近 超脫 session,然後如果沒有,它將附加到當前連接的會話。我想模仿的行為 screen -R:首先嘗試附加到分離的會話,然後在沒有分離的會話時啟動新會話。在tmux中實現這一目標的最佳方法是什麼?


9
2017-10-13 19:31


起源




答案:


在諮詢了IRC的嚮導之後,我確信沒有單一的tmux命令具有這種行為。幸運的是,使用shell模擬相當容易:

(tmux ls | grep -vq attached && tmux at) || tmux

12
2017-10-13 21:03



如果您正在啟動新會話,請進行輕微編輯以壓制“無法連接到服務器:拒絕連接”輸出: (tmux ls 2>/dev/null | grep -vq attached && tmux at) || tmux - l8nite


儘管它在tmux手冊中說的是:

             The target-session rules for attach-session are slightly
         adjusted: if tmux needs to select the most recently used session,
         it will prefer the most recently used unattached session.

德魯的答案在以下情況下無法正常運作:

0: 1 windows (created Wed Nov  7 23:51:08 2012) [177x47]
1: 1 windows (created Wed Nov  7 23:51:33 2012) [177x47] (attached)

tmux at 將附加到最後一個會話(#1)(即使此會話仍然附加在其他地方)。這破壞了運行多個tmux會話並僅附加到分離會話的整個想法(使用mosh + tmux + iterm2來創建一個完美的漫遊終端)。

另一種方法是手動選擇非附加會話:

tmux ls | grep -vq attached && tmux at `tmux ls | grep -vm1 attached | cut -d: -f1`


3
2017-11-08 00:52



接得好!文檔與實際行為不同步。我創造了一個 錯誤報告 為了這。 - Drew Frank
修補程序已經解決了,所以在下一個版本中它應該像宣傳的一樣。 - Drew Frank
補丁是1.8嗎? - momeara


我傾向於一次只有兩個tmux會話,所以我在每個終端窗口做這樣的事情。

終端窗口0:

tmux attach -t 0 || tmux new

終端窗口1:

tmux attach -t 1 || tmux new

2
2017-12-08 18:04





這對我來說是最好的:

if [ -z "$TMUX" ]; then
     (tmux ls | grep -vq attached && tmux at -t `tmux ls | grep -vm1 attached | cut -d: -f1`) || tmux new
fi

-t需要附加到正確的會話。


2
2018-01-16 03:18





關於什麼

tmux attach || tmux new

或者只是創建文件 ~/.tmux.conf 如果它不存在,並添加

new-session

對它來說,當你運行時沒有它會創建一個新的會話 tmux attach

它也可能很方便 tmux 別名 tmux attach


1
2017-10-13 21:22



第一個提議將附加到當前附加的tmux會話(類似於屏幕-x),這是我想要避免的。第二個提議表現出同樣的問題,並且當我使用tmux source-file命令重新加載配置時,還會產生創建“額外”tmux會話的不良後果。 - Drew Frank