Come si imposta la modalità di contaminazione in uno script perl con unCome impostare la modalità di contaminazione in uno script perl con un '#!/Usr/bin/env perl'-shebang?
#!/usr/bin/env perl
la baracca?
Come si imposta la modalità di contaminazione in uno script perl con unCome impostare la modalità di contaminazione in uno script perl con un '#!/Usr/bin/env perl'-shebang?
#!/usr/bin/env perl
la baracca?
Si può passare la variabile d'ambiente PERL5OPT sulla linea shebang:
#!/usr/bin/env PERL5OPT=-T perl
Questo mi sembra piuttosto al contrario.
Un'altra opzione, è quello di ri-eseguire lo script in modalità macchia se si rileva che non è su:
#!/usr/bin/env perl
warn 'Taint mode is '.(${^TAINT} ? 'on' : 'off'); # For debugging
exec($^X,'-T',$0,@ARGV) unless ${^TAINT};
# do stuff under taint mode here
Ovviamente, questo è un grande successo prestazioni di avvio.
Non è possibile specificare una variabile in uno shebang con/usr/bin/env. Ciò farà sì che env esegua se stesso in un ciclo infinito, senza mai arrivare al comando richiesto. L'ho testato sia su Linux che su FreeBSD. – Zed
Sì - sembra essere solo OS-X che attualmente supporta il primo incantesimo. –
Dal modalità macchia può essere attivata solo tramite la bandiera -T
, e env
non accetterà alcuna bandiere in uno shebang, la soluzione migliore è quella di eseguire il programma tramite perl -T script.pl
piuttosto che eseguire direttamente lo script.
Se è assolutamente necessario per far rispettare la modalità taint nella baracca, si potrebbe fare uno script taintperl
da qualche parte nel PATH (ad esempio,/usr/local/bin) con il seguente contenuto:
#!/bin/sh
/usr/bin/env perl -T
Poi, nel tuo script Perl, hanno
#!/usr/bin/env taintperl
In molti sistemi operativi, non puoi usare uno script interpretato come interprete di script. Dovresti farlo in un linguaggio compilato, ad es. C –
@GavinBrock Questo vale per il programma menzionato immediatamente dopo '#!'. Qui è '/ usr/bin/env', che è compilato. A sua volta, 'env' non si preoccupa se' taintperl' è un programma compilato o meno. – maxelost
È utile se non è possibile prevedere la posizione del binario perl (/ usr/bin o/usr/local/bin). http://www.perlmonks.org/?node_id=716740 - Credo che la domanda sia se si può predire la posizione di env ... –
Sul mio PC io uso/usr/local/bin/perl e sul mio netbook/usr/bin/perl. Quindi con/usr/bin/env perl non devo cambiare i miei script perl. E suppongo che spediranno la prossima versione del mio sistema operativo con la versione 5.10.1 di perl, quindi forse userò nuovamente il mio PC onboard-perl con/usr/bin/perl e anche lì non dovrò cambiare le mie shebang. –
Gavin, la posizione di 'env' è standardizzata. – daxim