
我正在寫劇本。我真的很想知道這個。我希望 tmux 可執行檔可以告訴我這一點。
我發現
tmux rename <newname>
可以重命名目前會話。但我找不到獲取其自身名稱的命令。
答案1
和多路復用器1.2(及更高版本),您可以使用選項-p
將display-message
訊息輸出到 stdout(而不是將其顯示到附加的客戶端):
tmux display-message -p '#S'
#S
status-left
格式為會話名稱(請參閱手冊頁中該選項的說明)。
答案2
令我驚訝的是,近五年過去了,沒有人指出這些答案都不充分。雖然只要當前 TTY 連接到主機上唯一的 tmux 會話,兩者都可以正常工作,但如果出現以下情況,這些答案都會失敗:
- 目前終端會話不是 tmux 會話的一部分,或者
- 有多個附加的 tmux 會話
在前一種情況下,這裡的兩個答案都會報告附加會話的名稱(無論當前 tty 是否由該會話管理)。在後一種情況下,結果可能是不確定的或產生多個答案。
正確的問題應該是“我目前的終端會話所附加的 tmux 會話的名稱是什麼?”
因為他回答那問題,執行:
for s in $(tmux list-sessions -F '#{session_name}'); do
tmux list-panes -F '#{pane_tty} #{session_name}' -t "$s"
done | grep "$(tty)" | awk '{print $2}'
無論 tmux 會話(附加或其他)數量如何,也無論目前終端會話是否是 tmux 會話的一部分,這都有效。
答案3
擴展/修正蒂姆人民的回答
按照don_crissti 的評論
在為什麼這grep -v
沒有如預期運行?。
“$(tty)”命令蒂姆人民的回答
| grep "$(tty)" | | grep "$(tty)" |
在這種情況下將無法如預期般運作。它的計算結果為字串“not a tty”。
用變數取代它可以解決這個問題。
蒂=$(蒂)
…
| grep“$tty”|
另外,當不存在 tmux 會話時,原始程式碼將產生
“/tmp/tmux-1000/default 上沒有運行伺服器”錯誤訊息.
新增後2>/dev/null
,程式碼將運行,而不會列印出錯誤訊息。
修改後的程式碼如下:
tty=$(tty)
for s in $(tmux list-sessions -F '#{session_name}' 2>/dev/null); do
tmux list-panes -F '#{pane_tty} #{session_name}' -t "$s"
done | grep "$tty" | awk '{print $2}'
答案4
不太理想,但您可以使用以下命令來提取附加會話的名稱awk
:
tmux list-sessions -F '#{session_name} #{session_attached,yes,}' | awk '$2=="yes" {print $1}'
自訂格式比預設格式更容易解析。