我如何知道 tmux 会话的名称?

e27*_*314 13 linux tmux

最近,我开始使用tmux. 我觉得它很好,但我仍然无法理解这个应用程序。我的基本问题之一是:我怎么知道(从命令行)tmux我登录的会话的名称是什么?如果我登录到某个tmux会话,它会告诉我它的名称。但是,如果我没有登录到tmux会话,它将不打印任何内容或出现某种错误。

pfn*_*sel 18

会话的名称存储在变量中#S,要在访问它,您可以这样做

tmux display-message -p "#S"
Run Code Online (Sandbox Code Playgroud)

如果你想在 中使用它.tmux.conf,它只是#S. 请注意,该-p选项将在 stdout 上打印消息,否则该消息将显示在状态行中。

如果在会话内调用上述命令,它将返回会话的名称。如果在任何会话之外调用它,它仍会返回最后一个仍在运行的会话的名称。我找不到一个命令来检查一个会话是否在会话中,所以我不得不想出这个解决方法:

tmux list-sessions | sed -n '/(attached)/s/:.*//p'
Run Code Online (Sandbox Code Playgroud)

tmux list-sessions显示所有会话,如果已附加,则显示(attached)在最后。使用我们抑制所有输出(选项-n),除了找到关键字的地方(attached),在这一行我们删除了 a 之后的所有内容:,留下会话名称。这对我在会话内外都有效,而不是tmux display-message -p "#S".

当然,这仅在会话名称中没有:和没有时才有效(attached)。

正如Chris Johnsen所评论的,检查一个人是否在会话中的一种方法是查看其环境变量是否已设置:

[[ -n "${TMUX+set}" ]] && tmux display-message -p "#S"
Run Code Online (Sandbox Code Playgroud)

  • 您可能只需检查 TMUX 环境变量(它通常是为会话内的进程设置的,而不是在会话外设置的——这不是“万无一失”,因为某些东西可能会设置或取消设置 TMUX 并混淆事物,但它应该是相当可靠的)。在 *ksh*、*bash*、*zsh* 等中:`[[ -n "${TMUX+set}" ]] && tmux display-message -p "#S"` (4认同)