使用 cURL 檢索 tmux 配置的公共 IP 會建立太多連接

使用 cURL 檢索 tmux 配置的公共 IP 會建立太多連接

我目前正在使用命令:和tmux.conf 中的 curl icanhazip.com選項來檢索並在狀態列中顯示我的公共 IP。set -g status-left ...

這很好用,儘管我真的很煩惱請求數量正在檢索相同的 IP一遍又一遍再次。

問題:

如何使用 tmux 配置在每個會話僅一個通訊流(或較少冗餘的東西)的情況下實現這一點(在 tmux 狀態列中檢索/顯示公共 IP)?

我瀏覽了curl的手冊頁面並嘗試了命令中的各種速率限制參數[無濟於事],儘管我認為這是tmux特有的東西。

我可以使用外部腳本或某種函數來完成此任務,儘管我想保持簡單。

任何解決此問題或完全替代方法的建議都會很棒!

編輯:格式化

答案1

快取資訊:

  1. 新增每 5 或 10 分鐘執行一次的 cron 作業:

    curl http://icanhazip.com > ~/.cache/my-ip
    

    某些來源透過無連線協定提供此訊息,因此不會像基於連線的 HTTP 來源那樣嚴格限制:

    dig +short myip.opendns.com @208.67.222.222 > ~/.cache/my-ip
    
  2. 在 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";

相關內容