Il ne fonctionne pas dans votre exemple, parce que vous n'avez jamais l'impression $r. La sortie est capturé dans la variable $r. En utilisant system() au lieu de cela, vous pouvez voir la sortie affichée sur la sortie standard, mais vous ne pouvez pas utiliser la sortie que vous (probablement) attendu.
Viens de faire:
print $r;
Mise à jour: j'ai changé say à print, depuis "echo" vous donne déjà un retour à la ligne.
Pour échapper à la coque méta-caractères, comme mentionné dans les commentaires, vous pouvez utiliser quotemeta.
Vous devriez aussi être conscient que | more a aucun effet lors de la capture de la sortie de la coque dans une variable. Le processus est tout simplement: echo | more | $r, et vous pourriez aussi bien sauter more.
Comment échapper à la chaîne lors du passage de bash? Vous pouvez utiliser quotemeta. Ou vous pouvez les caractères d'échappement-vous, si vous savez quoi chercher.
my $s ="s" x 1000;my $r = system("echo $s |more");
affichera toutes vos "s", et dans $r vous aurez le résultat (0 dans ce cas) de la commande.
Que faire si $s contient des caractères spéciaux ? Est-il une fonction pour faire shell_escape comme stuff? lexer, stackoverflow.com/q/3212128#3212171 ce qui est différent de quotemeta? quotemeta est le mauvais outil, car c'est pour la citation regexp de caractères spéciaux, pas de caractères spéciaux du shell.
Il ne fonctionne pas dans votre exemple, parce que vous n'avez jamais l'impression
$r
. La sortie est capturé dans la variable$r
. En utilisantsystem()
au lieu de cela, vous pouvez voir la sortie affichée sur la sortie standard, mais vous ne pouvez pas utiliser la sortie que vous (probablement) attendu.Viens de faire:
Mise à jour: j'ai changé
say
àprint
, depuis "echo" vous donne déjà un retour à la ligne.Pour échapper à la coque méta-caractères, comme mentionné dans les commentaires, vous pouvez utiliser quotemeta.
Vous devriez aussi être conscient que
| more
a aucun effet lors de la capture de la sortie de la coque dans une variable. Le processus est tout simplement:echo | more | $r
, et vous pourriez aussi bien sautermore
.Vous pouvez utiliser quotemeta. Ou vous pouvez les caractères d'échappement-vous, si vous savez quoi chercher.
OriginalL'auteur TLP
essayer avec le system() commande :
affichera toutes vos "s", et dans
$r
vous aurez le résultat (0 dans ce cas) de la commande.$s
contient des caractères spéciaux ? Est-il une fonction pour faire shell_escape comme stuff?lexer, stackoverflow.com/q/3212128#3212171
ce qui est différent de
quotemeta
?quotemeta est le mauvais outil, car c'est pour la citation regexp de caractères spéciaux, pas de caractères spéciaux du shell.
OriginalL'auteur Cédric Julien