자식 셸에서 Perl로 프록시를 다시 내보낼 수 없다
Perl의 ENV를 직접 설정하고 자식 호출 하나를 local로 감싸 프록시 변수를 제한하면 원래 값이 나중에 되돌아옵니다.
export가 들어 있는 백틱 명령은 그 명령을 위해 만들어진 셸만 바꿉니다. 셸이 끝나면 부모 Perl 프로세스에는 이전 환경이 그대로 남아 있습니다.
대신 Perl의 환경 해시를 설정하세요. local은 변경을 한 블록 안에 유지할 수 있습니다.
{
local $ENV{http_proxy} = 'http://proxy.example:8080';
local $ENV{https_proxy} = 'http://proxy.example:8080';
my $status = system {
'/usr/bin/curl'
} '/usr/bin/curl', '--fail', '--max-time', '30',
'https://downloads.example/data.csv';
die "Downloader failed: $status" if $status != 0;
}
자식은 지역화된 값을 상속합니다. 공개 HTTP 다운로드의 경우 HTTP 프록시 목록의 엔드포인트가 그 URL 값을 제공할 수 있습니다. 블록이 끝나면 Perl은 이전 항목을, 이전에 없었던 상태까지 포함해 복원합니다. 표시되는 system 결과는 Perl의 프로세스 상태이며 디코딩된 HTTP 응답 코드가 아닙니다.
local은 동적 범위를 가집니다. 그 블록 안에서 호출된 다른 Perl 코드도 임시 환경을 볼 수 있습니다. 함수별 비공개 자격 증명 저장소가 아닙니다.
선택한 클라이언트에 대해 상속되는 대문자 변수와 우회 변수를 검토하세요. 어떤 입력을 소비할지는 다운로더가 결정합니다. 프록시 설정도 프로세스의 사용자 신원을 바꾸지 않으며 상속받기 위해 별도의 root 셸을 요구하지도 않습니다.