J'essaie de modifier un script Perl pour commenter toutes les lignes correspondant à un motif. Dans l'invite de commande normale, voici la ligne que je suis en train d'ajouter:La commande système Perl n'agit pas comme une invite normale
grep -lIRZ --exclude="*\.svn*" "pattern" . | xargs -0 -l sed -i -e 's/.*pattern.*/\/\/&/g'
Ici, il est dans le contexte du script perl:
my $rmcmd = "grep -lIRZ --exclude=\"*\\.svn*\" \"pattern\" . | xargs -0 -l sed -i -e 's/.*pattern.*/\\/\\/&/g'";
runcmd($rmcmd);
...
sub runcmd {
my @cmd = @_;
print "Running: @cmd\n";
system(@cmd);
# Get status from system
my $ret = $? >> 8;
if ($ret) {
print "-E- command completed with error code $ret.\n";
exit(1);
}
return ($ret);
}
Tout fonctionne correctement lorsqu'il est exécuté à partir d'une invite de commande , mais le script exécutant la même commande se bloque toujours. Qu'est-ce qui est fait différemment et comment puis-je le réparer?
(1) S'il vous plaît signaler l'erreur exacte que vous obtenez. (2) Veuillez imprimer et afficher la valeur de '$ rmcmd' - idéalement, à la fois via' print' et le débogueur Perl. (3) La bonne solution est de réécrire tout ce tuyau compliqué en code Perl. – DVK
(1) L'erreur exacte est: -E- commande terminée avec le code d'erreur 1.
(2) La fonction d'impression retourne: grep -lIRZ --exclude = "* \. Svn *" "dlclose". | xargs -0 -l sed -i -e /.* dlclose. */\/\/& g '
(3) Je suis nouveau à perl et runcmd était déjà défini dans le script. Quelle est la bonne façon de canaliser le code Perl? Pouvez-vous me donner quelques références? – user108088
pourquoi ne faites-vous pas tout cela en Perl? vous rendez votre code non portable. – ghostdog74