2011-09-08 13 views

Respuesta

6

No funciona en su ejemplo, porque nunca imprime $r. La salida se captura en la variable $r. Al usar system() en su lugar, puede ver la salida impresa en STDOUT, pero luego no puede usar la salida como probablemente esperaba.

Just Do:

print $r; 

Actualización: He cambiado say-print, ya que "eco" ya se le da una nueva línea.

Para escapar metacaracteres de shell, como se ha mencionado en los comentarios, puede utilizar quotemeta.

También debe tener en cuenta que | more no tiene ningún efecto en la captura de la salida de la cáscara en una variable. El proceso es simple: echo | more | $r, y también puede omitir more.

+0

¿Cómo escapar de la cadena cuando pasa a bash? – lexer

+0

Puede usar [quotemeta] (http://perldoc.perl.org/functions/quotemeta.html). O puede escapar de los personajes usted mismo, si sabe qué buscar. – TLP

3

tratar con el comando system():

my $s = "s" x 1000; 
my $r = system("echo $s |more"); 

mostrará toda su 's', y en $r tendrá el resultado (0 en este caso) del comando.

+1

¿Qué pasa si '$ s' contiene caracteres especiales? ¿Hay alguna función para hacer cosas como shell_escape? – lexer

+0

lexer, http://stackoverflow.com/q/3212128#3212171 – daxim

+0

@daxim, ¿cuál es la diferencia de 'quotemeta'? – lexer

Cuestiones relacionadas