- ¿Cuál es la diferencia entre ver2 y ver3?
Simplemente en qué argumentos está pasando al top
. No sé de una versión de top
que tendrá interruptores sin guiones como algunas versiones de ps
hacer, por lo que debe utilizar la versión 3.
- ¿Hay alguna razón por la que debería utilizar ver2 y ver3, y no ver1 ?
Si pasa una sola cadena a system
, la ejecutará a través de su caparazón. Esto significa que se interpretará en shell. Cualquier espacio callejero o metacaracteres (citas, signos de dólar, etc.) en los argumentos se interpretarían y posiblemente arruinarían las cosas. También es un potencial agujero de seguridad.
Por ejemplo, si $pid
era algo así como '10; echo pwnd; echo '
entonces que había corrido top -H -p 10
continuación echo pwnd
continuación echo -n1
.
Por lo tanto, para la protección y la seguridad, a menos que necesite el procesamiento de la carcasa (consulte a continuación), debe pasar una lista al sistema.
- ¿Hay algún equivalente en ver2 y ver3 que permita las tuberías?
No, la canalización y la redirección se realizan por el shell. Tienes que usar algo que no sea system
. Puedes hacerlo con open
, pero es un dolor en el trasero. La forma más fácil es usar IPC::Run.
use IPC::Run;
my $out;
run ["echo", "foo\nbar\nbaz"], "|",
["grep", "ba"], "|",
["wc", "-l"],
\$out;
print $out; # 2
Pero en realidad si solo está desgranando y contando un puñado de líneas, use Perl.
my $out;
run ["echo", "foo\nbar\nbaz"], '>', \$out;
my $count = grep { /ba/ } split /\n/, $out;
print $count;
Ver también http://stackoverflow.com/questions/3854651/how-can-i-store-the-result-of-a-system-command-in-a-perl-variable por el mismo usuario –
closevoter, esto no es un duplicado. Al menos lee las preguntas antes de marcar. @PP: ¿Quiso decir que era un duplicado? – Lazer
No, mencioné el enlace porque las preguntas están relacionadas. –