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

如何为Tmux状态栏各脚本设置不同的status-interval更新间隔?

Tmux状态栏多脚本差异化更新间隔实现方案

核心需求

  • 用三个脚本在Tmux状态栏右侧展示内容:
    • sysload.sh:系统负载
    • systemp.sh:CPU/GPU/HDD温度
    • weather.sh:调用OpenWeatherMap API获取天气
  • 更新间隔要求:
    • 系统负载、硬件温度每5秒更新一次
    • 天气每10分钟(600秒)更新一次,减少API调用次数
  • 原全局status-interval 60会强制整个状态栏每分钟更新,无法满足不同脚本的更新频率要求

原配置代码

set -g status-interval 60
...rest of statusline codes...
set -g status-right "#[fg=green,bg=default,bright]#($HOME/.config/tmux/sysload.sh)"
set -ag status-right "#[fg=grey80,bg=default,bright] | "
set -ag status-right "#[fg=pink3,bg=default,bright]#($HOME/.config/tmux/systemp.sh)"
set -ag status-right "#[fg=grey80,bg=default,bright] | "
set -ag status-right "#[fg=#7aa2f7,bg=default,bright]#($HOME/.config/tmux/weather.sh)"
set -ag status-right "#[fg=grey80,bg=default,bright] | "
set -ag status-right "#[fg=#565f89,bg=default]%b %d (%a) %H:%M#[default]"

无效的尝试方案

曾尝试删掉全局status-interval,给每个脚本加--interval参数,但Tmux本身不支持这种方式,无法实现差异化更新:

set -g status-right "#[fg=green,bg=default,bright]#($HOME/.config/tmux/sysload.sh --interval 5)"
set -ag status-right "#[fg=grey80,bg=default,bright] | "
set -ag status-right "#[fg=pink3,bg=default,bright]#($HOME/.config/tmux/systemp.sh --interval 5)"
set -ag status-right "#[fg=grey80,bg=default,bright] | "
set -ag status-right "#[fg=#7aa2f7,bg=default,bright]#($HOME/.config/tmux/weather.sh --interval 600)"
set -ag status-right "#[fg=grey80,bg=default,bright] | "
set -ag status-right "#[fg=#565f89,bg=default]%b %d (%a) %H:%M#[default]"

可行解决方案:脚本内部缓存

实现思路

Tmux的全局status-interval控制整个状态栏的更新频率,所以先把全局间隔设为最快的5秒,满足系统负载和温度的更新需求;然后在weather.sh里添加缓存逻辑,让它只在间隔超过10分钟时才调用API,否则直接输出缓存内容。

具体步骤

  1. 修改全局status-interval:
set -g status-interval 5
  1. 给weather.sh添加缓存功能,示例代码:
#!/bin/bash
# 缓存文件路径,可自行调整
CACHE_FILE="$HOME/.cache/tmux_weather.cache"
# 更新间隔:10分钟=600秒
UPDATE_INTERVAL=600

# 检查缓存是否有效
if [ -f "$CACHE_FILE" ]; then
    LAST_UPDATE=$(stat -c %Y "$CACHE_FILE")
    CURRENT_TIME=$(date +%s)
    if [ $((CURRENT_TIME - LAST_UPDATE)) -lt $UPDATE_INTERVAL ]; then
        # 缓存未过期,直接输出
        cat "$CACHE_FILE"
        exit 0
    fi
fi

# 缓存过期或不存在,调用API获取新数据
# 替换成你的OpenWeatherMap API调用逻辑,这里只是示例
WEATHER_INFO=$(curl -s "https://api.openweathermap.org/data/2.5/weather?q=你的城市&appid=你的API密钥" | jq -r '.weather[0].main + " " + (.main.temp | tostring) + "°C"')

# 更新缓存并输出结果
echo "$WEATHER_INFO" > "$CACHE_FILE"
echo "$WEATHER_INFO"
  1. 保持状态栏的脚本调用配置不变即可,和原配置一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 17:01:31