You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在tmux中运行脚本并自动更新状态栏展示内容?

问题原因

你当前使用的是持续循环输出的长驻shell脚本,tmux的#()语法对未退出的长命令仅会缓存首次运行的输出,不会自动拉取后续的新输出,因此出现仅刷新一次的问题。

解决方案

方案1:修改为单次执行脚本(推荐,配置最简单)

不要将脚本写为常驻循环的形式,调整为单次执行直接输出当前IP、执行完成后立即退出的版本,再搭配tmux自带的状态栏刷新间隔参数即可实现自动更新。

  1. 调整你的脚本内容示例:
#!/bin/bash
# 输出当前出口IP,无网络/VPN断开时返回自定义提示
curl -s --connect-timeout 2 ifconfig.me 2>/dev/null || echo "VPN Disconnected"
  1. 给脚本添加执行权限:
    chmod +x /path/to/your/script.sh
  2. 修改tmux配置文件(通常是~/.tmux.conf):
# 设置状态栏每15秒刷新一次,和你需要的更新间隔对齐
set -g status-interval 15
# 在状态栏对应位置插入脚本输出,示例是添加到状态栏左侧
set -g status-left "#[fg=cyan]VPN IP: #(/path/to/your/script.sh) #[default]"

修改完成后执行tmux source ~/.tmux.conf加载配置即可生效。

方案2:使用全局环境变量传递常驻脚本输出

如果你确实需要保留脚本的常驻循环逻辑(比如要降低重复启动脚本的开销、或者要实现比全局status-interval更灵活的独立刷新频率),可以用tmux全局环境变量做中转:

  1. 调整你的循环脚本内容示例:
#!/bin/bash
while true; do
    current_ip=$(curl -s --connect-timeout 2 ifconfig.me 2>/dev/null || echo "VPN Disconnected")
    # 将IP写入tmux全局环境变量
    tmux setenv -g CURRENT_VPN_IP "$current_ip"
    sleep 15
done
  1. 给脚本添加执行权限:
    chmod +x /path/to/your/loop_script.sh
  2. 修改tmux配置文件:
# tmux启动时后台运行你的常驻脚本
run-shell -b '/path/to/your/loop_script.sh'
# 状态栏直接读取全局环境变量显示
set -g status-left "#[fg=cyan]VPN IP: #{$CURRENT_VPN_IP} #[default]"

加载配置后即可生效,脚本会每15秒自动更新环境变量的值,状态栏会自动读取最新值显示。


内容的提问来源于stack exchange,提问作者itsnexn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 09:54:05