最近,我开始使用tmux. 我觉得它很好,但我仍然无法理解这个应用程序。我的基本问题之一是:我怎么知道(从命令行)tmux我登录的会话的名称是什么?如果我登录到某个tmux会话,它会告诉我它的名称。但是,如果我没有登录到tmux会话,它将不打印任何内容或出现某种错误。
pfn*_*sel 18
会话的名称存储在tmux变量中#S,要在终端中访问它,您可以这样做
tmux display-message -p "#S"
Run Code Online (Sandbox Code Playgroud)
如果你想在 中使用它.tmux.conf,它只是#S. 请注意,该-p选项将在 stdout 上打印消息,否则该消息将显示在tmux状态行中。
如果在会话内调用上述命令,它将返回会话的名称。如果在任何会话之外调用它,它仍会返回最后一个仍在运行的会话的名称。我找不到一个tmux命令来检查一个会话是否在会话中,所以我不得不想出这个解决方法:
tmux list-sessions | sed -n '/(attached)/s/:.*//p'
Run Code Online (Sandbox Code Playgroud)
tmux list-sessions显示所有会话,如果已附加,则显示(attached)在最后。使用sed我们抑制所有输出(选项-n),除了找到关键字的地方(attached),在这一行我们删除了 a 之后的所有内容:,留下会话名称。这对我在会话内外都有效,而不是tmux display-message -p "#S".
当然,这仅在会话名称中没有:和没有时才有效(attached)。
正如Chris Johnsen所评论的,检查一个人是否在tmux会话中的一种方法是查看其环境变量是否已设置:
[[ -n "${TMUX+set}" ]] && tmux display-message -p "#S"
Run Code Online (Sandbox Code Playgroud)