我正在写脚本。我真的很想知道这一点。我希望tmux可执行文件可以告诉我这一点。
我发现
tmux rename <newname>
可以重命名当前会话。但是我找不到命令来获取自己的名字。
我正在写脚本。我真的很想知道这一点。我希望tmux可执行文件可以告诉我这一点。
我发现
tmux rename <newname>
可以重命名当前会话。但是我找不到命令来获取自己的名字。
Answers:
在tmux 1.2(及更高版本)中,您可以使用-p
选项display-message
将消息输出到stdout(而不是将其显示给连接的客户端):
tmux display-message -p '#S'
#S
的格式设置为会话名称(请参见status-left
手册页中选项的说明)。
令我惊讶的是,在将近5年之后,没有人指出这些答案都不足够。只要当前的TTY附加到主机上唯一的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会话的一部分,此方法均有效。
tmux list-panes -a -F '#{pane_tty} #{session_name}'
列出每个会话的窗格。不知道是新-a
的,所以YMMV。
TMUX
在运行tmux display-message -p '#S'
典型的桌面安装程序之前与检查环境变量结合使用,则方法1可以正常工作。
根据don_crissti
关于“ 为什么不能按预期运行”的评论,扩展/更正了蒂姆人的回答。。grep -v
tim-peoples回答中的 “ $(tty)”命令
| grep“ $(tty)” |
在这种情况下无法按预期工作。它的计算结果是字符串“ not 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}'