我正在写一个脚本。我真的很想知道这一点。我希望 tmux 可执行文件可以告诉我这一点。
我发现
tmux rename <newname>
可以重命名当前会话。但我找不到命令来获取其自己的名称。
答案1
和tmux1.2(及更高版本),您可以使用选项-p
将display-message
消息输出到 stdout(而不是将其显示给附加的客户端):
tmux display-message -p '#S'
#S
status-left
被格式化为会话名称(请参阅手册页中该选项的描述)。
答案2
令我惊讶的是,近 5 年后,没有人指出这两个答案都不充分。虽然只要当前 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
扩展/更正tim-peoples 的回答
按照don_crissti 的评论
在为什么这grep -v
没有按预期运行?。
“$(tty)”命令tim-peoples 的回答
| grep “$(tty)” |
在该上下文中不会按预期工作。它计算结果为字符串“not a tty”。
用变量替换它可以解决这个问题。
tty=$(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}'
自定义格式比默认格式更容易解析。