关键是,我希望能够:
- 打印一个窗口唯一的变量,或者
- 运行一个窗口唯一的脚本
并将输出用于状态栏,使每个窗口的状态都是唯一的。 我尝试通过以下两种情况来更清楚地说明:
情况1
我正在尝试在状态栏中打印每个窗口唯一的变量。 我已经在tmux内开了一个shell,并使用以下命令存储了tmux环境变量的本地副本(对于每个会话)和全局副本(适用于所有会话):
bash> tmux set-environment TMUX_STATUS_1 localvalue1
bash> tmux set-environment -g TMUX_STATUS_1 globalvalue1
例如,我可以通过打开另一个 shell(在同一个会话中)并输入以下命令来验证这些值:
bash> tmux show-environment TMUX_STATUS_1
TMUX_STATUS_1=localvalue1
bash> tmux show-environment -g TMUX_STATUS_1
TMUX_STATUS_1=globalvalue1
我已经尝试在状态栏中打印上述值(本地和全局值),并将窗口格式配置如下:
WINDOW='[#(tmux show-environment -g TMUX_STATUS_#I 2>&1)]'
setw -g window-status-current-format $WINDOW
setw -g window-status-format $WINDOW
最初只显示窗口为 '[]',之后我添加了将stderr重定向到stdout的操作,然后状态栏显示如下:
[unknown variable: TMUX_STATUS_1] [unknown variable: TMUX_STATUS_2] [...
需要更改哪些内容才能使状态栏显示(根据先前的命令):
[globalvalue1] [unknown variable: TMUX_STATUS_2] [...
PS:这不是状态栏刷新的问题,因为在将变量设置后,我使用了以下命令来手动强制刷新状态栏:
tmux refresh-client -S
场景2
我写了一个名为“tmuxscript”的小型bash脚本,其内容如下:
echo "$(date '+%S') window:$(tmux display -p '#I') args:$@"
我已更新了PATH变量,并将窗口格式更改为 '[#(tmuxscript arg1 #I)]'。输出结果如下:
[47 window:1 args:arg1] [47 window:1 args:arg1] [...
时间显示更新得很好。在脚本中打印窗口索引似乎不起作用。数字1代表当前聚焦窗口的窗口索引。该值适用于所有窗口,而这不是我想要的。我至少希望看到(请注意窗口索引号):
[47 window:1 args:arg1] [47 window:2 args:arg1] [...
此外,#I无法传递到脚本中,但文本“arg1”可以。我如何将tmux变量传递给脚本?
编辑:我现在还尝试将窗口状态设置为:
'[#(tmux show-environment -g TMUX_STATUS_$\(tmux display -p "#I"\) 2>&1 | sed "s:^.*=::" )]'
当活动(焦点)窗口索引为1时,我得到了以下结果:
[globalvalue1] [globalvalue1] [...
非常感谢您提供的任何帮助!
#(..)
中没有扩展#I
。但是在错误信息中,它被扩展了:unknow... :Tmux_.._#I
。很可能是这样工作的。换句话说,你的 shell 命令正在寻找不存在的tmux_status_#I
。 - KentTMUX_STATUS_#I not found
,因为你设置了窗口名称,#I
被替换为1,2,3...
的 winIdx。这就是为什么你在错误消息中得到了“正确”的变量名。但是,在 shell 错误消息中你得到了#I
。 - Kent