我有几个tmux脚本,在我的tmux状态栏中显示ip,time,hostname等信息。例如,ip脚本如下所示:
#!/bin/bash
runSegment() {
# check for a network connection
nc -z 8.8.8.8 53 >/dev/null 2>&1
online=$?
if [ $online -eq 0 ]; then
# get ip
ip=`curl icanhazip.com`
echo -n " ${ip}"
else
echo ""
fi
}
export -f runSegment
它检查网络连接并获取ip(如果有)。现在我的tmux状态栏设置为每五秒刷新一次(tmux set-option -g status-interval 5
)。但是,每五秒钟向这些服务发出网络请求似乎有点过分。
但是,我想保持电池状态和时间每五秒更新一次,因此将状态间隔设置为五分钟左右不是一种选择。
那么如何让这个脚本返回一个缓存的值,并且仅在五分钟左右刷新该值?我假设我需要在bash中解决这个问题,但我需要有内部状态,并且每当我不确定如何处理它时,这个脚本会重新运行。
答案 0 :(得分:0)
这样可行:
#!/bin/bash
runSegment() {
# check if online and assign exit code to variable
nc -z 8.8.8.8 53 >/dev/null 2>&1
local online=$?
if [ $online -eq 0 ]; then
# check how many seconds ago ip was retrieved
local lastmod=$(( $(date +%s) - $(stat -f%c ~/.current-ip) ))
# if longer than five minutes ago refresh the value and echo that
if [ $lastmod -gt 300 ]; then
local ip=$(curl icanhazip.com)
echo ${ip} > $HOME/.current-ip
echo -n " ${ip}"
# otherwise use the cached value
else
local ip=$(cat $HOME/.current-ip)
echo -n " ${ip}"
fi
# return empty value if there's no connection
else
echo ""
fi
}
export -f runSegment