- Qual è la differenza tra ver2 e ver3?
Proprio in quali argomenti si sta passando a top
. Non so di una versione di top
che avrà interruttori senza trattini, come alcune versioni di ps
fare, così si dovrebbe utilizzare la versione 3.
- C'è qualche motivo devo usare ver2 e ver3, e non ver1 ?
Se si passa una stringa singola a system
, verrà eseguita tramite la shell. Ciò significa che sarà interpretato da shell. Qualsiasi spazio randagio o meta caratteri della shell (virgolette, segni del dollaro, ecc.) Negli argomenti verrebbero interpretati e probabilmente rovinerebbero le cose. È anche un potenziale buco di sicurezza.
Per esempio, se $pid
era qualcosa di simile '10; echo pwnd; echo '
allora si sarebbe esegue top -H -p 10
quindi echo pwnd
poi echo -n1
.
Quindi, sia per la sicurezza che per la protezione, a meno che non sia necessaria l'elaborazione della shell (vedere di seguito) è necessario passare a un elenco di sistema.
- Esistono equivalenti di ver2 e ver3 che consentono le condotte?
No, le connessioni e il reindirizzamento vengono eseguiti dalla shell. Devi usare qualcosa di diverso da system
. Puoi farlo con open
, ma è un rompicoglioni. Il modo più semplice è utilizzare IPC::Run.
use IPC::Run;
my $out;
run ["echo", "foo\nbar\nbaz"], "|",
["grep", "ba"], "|",
["wc", "-l"],
\$out;
print $out; # 2
Ma in realtà se si sta semplicemente facendo il grepping e contando una manciata di righe, utilizzare Perl.
my $out;
run ["echo", "foo\nbar\nbaz"], '>', \$out;
my $count = grep { /ba/ } split /\n/, $out;
print $count;
Vedi anche http://stackoverflow.com/questions/3854651/how-can-i-store-the-result-of-a-system-command-in-a-perl-variable dalla stessa utente –
closevoter, questo non è un duplicato. Almeno leggi le domande prima di segnare. @PP: intendevi dire che era un duplicato? – Lazer
No, ho citato il link perché le domande sono correlate. –