我目前正在使用命令:和tmux.conf 中的 curl icanhazip.com
选项来检索并在状态栏中显示我的公共 IP。set -g status-left ...
这很好,尽管我真的很困扰请求数正在检索相同的 IP一遍又一遍再次。
问题:
如何使用 tmux 配置每个会话仅使用一个通信流(或冗余程度较低的流)来实现此目的(在 tmux 状态栏中检索/显示公共 IP)?
我查看了 curl 的手册页,并在命令中尝试了各种速率限制参数 [但无济于事],但我认为这是 tmux 特有的。
尽管我想保持简单,但我可以使用某种外部脚本或函数来实现这一点。
任何能够解决这个问题或完全替代方法的建议都非常好!
编辑:格式化
答案1
缓存信息:
添加每 5 分钟或 10 分钟运行一次的 cron 作业:
curl http://icanhazip.com > ~/.cache/my-ip
一些来源通过无连接协议提供此信息,因此其限制不会像基于连接的 HTTP 来源那样严格:
dig +short myip.opendns.com @208.67.222.222 > ~/.cache/my-ip
在 tmux 中,将命令更改为仅从缓存文件中读取:
cat ~/.cache/my-ip
这也可以通过一个脚本来完成,但是会没那么简单:
#!/usr/bin/env perl
use LWP::Simple;
sub read_cached_ip {
my ($file) = @_;
return undef if !-e $file; # check if file exists
my $mtime = (stat $file)[9];
return undef if time - $mtime >= 5*60; # check if file has expired
if (open(my $fh, "<", $file)) {
chomp(my $ip = <$fh>);
close($ip);
return $ip;
}
return undef;
}
sub update_ip {
my ($file) = @_;
my $ip = LWP::Simple::get("http://icanhazip.com");
if (open(my $fh, ">", $file)) {
print $fh "$ip\n";
close($ip);
}
return $ip;
}
my $file = $ENV{HOME}."/.cache/my-ip";
my $ip = read_cached_ip($file) // update_ip($file);
print "$ip\n";