2011-09-08 14 views

risposta

6

Non funziona nell'esempio, perché non si stampa mai $r. L'output viene catturato nella variabile $r. Utilizzando invece system(), è possibile vedere l'output stampato su STDOUT, ma non è possibile utilizzare l'output come si (probabilmente) prevede.

Basta fare:

print $r; 

Aggiornamento: Ho cambiato say-print, dal momento che "echo" già ti dà una nuova riga.

Per uscire shell meta caratteri, come detto nei commenti, è possibile utilizzare quotemeta.

Si dovrebbe anche essere consapevoli del fatto che | more non ha alcun effetto durante la cattura di uscita dal guscio in una variabile. Il processo è semplicemente: echo | more | $r, e si potrebbe anche saltare more.

+0

Come sfuggire alla stringa quando si passa a bash? – lexer

+0

Puoi usare [quotemeta] (http://perldoc.perl.org/functions/quotemeta.html). Oppure puoi sfuggire ai personaggi da solo, se sai cosa cercare. – TLP

3

provare con il comando system():

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

visualizzerà tutti i tuoi 's', e in $r avrai il risultato (0 in questo caso) del comando.

+1

Cosa succede se '$ s' contiene caratteri speciali? Esiste una funzione per fare shell_escape allo stesso modo? – lexer

+0

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

+0

@daxim, qual è il diverso da "quotemeta"? – lexer

Problemi correlati