J'essaye de faire cd dans mon script perl. J'utilise la commande ci-dessous:
chdir "/home/test/test1/test2/perl*";
perl *
la valeur est en fait perl_0122_2044
, mais cette valeur peut varier.
La commande chdir
ci-dessus ne fait pas cd
sur le chemin. Est-ce que je fais quelque chose de mal?
3 Réponses :
chdir
n'accepte pas *
et autres caractères d'expansion dans l'argument. Utilisez glob
ou quelque chose de similaire pour cela pour extraire un seul répertoire, puis chdir
vers celui-ci. Par exemple, cela change de répertoire pour le premier / home / test / test1 / test2 / perl *
qu'il trouve:
$dir = (glob "/home/test/test1/test2/perl*")[0]; # only change dir if any dir was found: if (-d $dir) { # fail if cannot change dir (or, even better, use autodie): chdir $dir or die "Could not change to $dir: $!"; }
Et vérifiez cette erreur, principalement pour voir le répertoire qu'il a essayé: chdir $ dir or die "Impossible de changer en $ dir: $!";
@briandfoy Merci pour le rappel, ajouté ceci et une vérification supplémentaire!
Dans le même ordre d'idées, glob est géré par un module dans raku https://modules.raku.org/dist/IO::Glob
Comment savez-vous que ce n'est pas le cas? Qu'espérez-vous qu'il se passe?
Je ne vois aucune erreur lors de la vérification. Utilisez-vous le pragma
autodie
? Comment savez-vous que cela ne fonctionne pas?Les commandes complètes sont les suivantes: chdir "/ home / test / test1 / test2 / perl *"; exec "cat test.in | grep build | awk '{print \ $ 2}'"; Après avoir exécuté le script, il affiche l'erreur: cat: test.in: aucun fichier ou répertoire de ce type
Vous devriez mettre cela dans votre question, pas dans un commentaire.