현재 상태 표시줄에 내 공용 IP를 검색하고 표시하기 위해 tmux.conf의 명령 curl icanhazip.com
과 옵션을 사용하고 있습니다.set -g status-left ...
정말 효과가 좋지만,요청 수동일한 IP를 검색하기 위해 만들어지고 있는계속해서다시.
질문:
tmux 구성을 사용하여 세션당 단 하나의 통신 스트림(또는 덜 중복되는 스트림)으로 이를 달성하려면 어떻게 해야 합니까(tmux 상태 표시줄에서 공개 IP 검색/표시)?
나는 컬의 매뉴얼 페이지를 살펴보고 명령에서 [소용이 없는] 다양한 속도 제한 인수를 시도했지만 이것이 tmux에만 해당되는 것이라고 생각합니다.
이 작업을 단순하게 유지하고 싶지만 외부 스크립트나 일종의 함수를 사용하여 이를 수행할 수 있습니다.
이 문제를 해결하기 위한 제안이나 대체 방법을 완전히 제안해 주시면 감사하겠습니다!
편집: 서식 지정
답변1
정보를 캐시합니다.
5분 또는 10분마다 실행되는 크론 작업을 추가합니다.
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";