我正在写一个脚本。我真的很想知道这个。我希望 tmux 可执行文件可以告诉我这一点。
我发现
tmux rename <newname>
Run Code Online (Sandbox Code Playgroud)
可以重命名当前会话。但是我找不到一个命令来获取它自己的名字。
Chr*_*sen 58
使用tmux 1.2(及更高版本),您可以使用-p选项display-message将消息输出到标准输出(而不是将其显示给附加的客户端):
tmux display-message -p '#S'
Run Code Online (Sandbox Code Playgroud)
#S格式为会话名称(请参阅status-left手册页中的选项说明)。
小智 13
我很惊讶,在将近 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}'
Run Code Online (Sandbox Code Playgroud)
无论 tmux 会话的数量(附加或其他)如何,无论当前终端会话是否是 tmux 会话的一部分,这都有效。
根据don_crissti
关于为什么这不能按预期运行的评论,扩展/更正了tim-peoples 的回答?.grep -v
tim-peoples 中的“$(tty)”命令
| grep "$(tty)" |
在这种情况下不会按预期工作。它评估为字符串“不是 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}'
Run Code Online (Sandbox Code Playgroud)
tty.相反,我发现这对我来说很准确:
if [[ -n "$TMUX_PANE" ]]; then
session_name=$(tmux list-panes -t "$TMUX_PANE" -F '#S' | head -n1)
fi
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
23421 次 |
| 最近记录: |