Дочірня оболонка не може експортувати проксі назад у Perl
Задайте ENV у Perl безпосередньо й обмежте змінні проксі за допомогою local навколо одного виклику дочірнього процесу, щоб попередні значення згодом повернулися.
Команда з backtick, що містить 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-оболонки лише для успадкування.