Ni all is-gragen allforio procsi yn ôl i Perl
Gosodwch ENV Perl yn uniongyrchol a chyfyngwch newidynnau procsi gyda local o amgylch un alwad plentyn fel bod y gwerthoedd gwreiddiol yn dychwelyd wedyn.
Mae gorchymyn backtick sy'n cynnwys export yn newid y gragen a grëwyd ar gyfer y gorchymyn hwnnw yn unig. Pan fydd y gragen yn gorffen, mae proses Perl rhiant yn dal i gadw ei hamgylchedd blaenorol.
Gosodwch hash amgylchedd Perl yn lle hynny. Gall local gadw'r newid o fewn un bloc:
{
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;
}
Mae'r plentyn yn etifeddu'r gwerthoedd a leolwyd. Ar gyfer lawrlwytho HTTP cyhoeddus, gall pwynt terfyn o'r rhestr procsi HTTP ddarparu'r gwerthoedd URL hynny. Pan fydd y bloc yn gorffen, mae Perl yn adfer y cofnodion blaenorol, gan gynnwys eu habsenoldeb blaenorol. Canlyniad system a ddangosir yw statws proses Perl, nid cod ymateb HTTP wedi'i ddadgodio.
Mae gan local gwmpas deinamig: gall cod Perl arall a alwyd o fewn y bloc hwnnw weld yr amgylchedd dros dro hefyd. Nid yw'n storfa gyfrinachol breifat fesul swyddogaeth.
Adolygwch y newidynnau etifeddol priflythrennau a'r newidynnau osgoi ar gyfer y cleient a ddewiswyd. Y lawrlwythwr sy'n penderfynu pa fewnbynnau y mae'n eu defnyddio. Nid yw gosodiad procsi ychwaith yn newid hunaniaeth defnyddiwr y broses nac yn mynnu cragen root ar wahân dim ond i'w hetifeddu.