我目前正在使用命令:和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";