我如何透過執行 tmux 命令知道目前 tmux 會話名稱

我如何透過執行 tmux 命令知道目前 tmux 會話名稱

我正在寫劇本。我真的很想知道這個。我希望 tmux 可執行檔可以告訴我這一點。

我發現

tmux rename <newname>

可以重命名目前會話。但我找不到獲取其自身名稱的命令。

答案1

多路復用器1.2(及更高版本),您可以使用選項-pdisplay-message訊息輸出到 stdout(而不是將其顯示到附加的客戶端):

tmux display-message -p '#S'

#Sstatus-left格式為會話名稱(請參閱手冊頁中該選項的說明)。

答案2

令我驚訝的是,近五年過去了,沒有人指出這些答案都不充分。雖然只要當前 TTY 連接到主機上唯一的 tmux 會話,兩者都可以正常工作,但如果出現以下情況,這些答案都會失敗:

  1. 目前終端會話不是 tmux 會話的一部分,或者
  2. 有多個附加的 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}'

自訂格式比預設格式更容易解析。

相關內容