Дочерняя оболочка не может экспортировать прокси обратно в Perl
Задайте ENV в Perl напрямую и ограничьте переменные прокси с помощью 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-оболочки только ради наследования.