Perl et commandes Linux
Résolu/Fermé
artagon7
Messages postés
417
Date d'inscription
dimanche 6 novembre 2005
Statut
Membre
Dernière intervention
12 novembre 2024
-
15 déc. 2007 à 19:57
Christophe7502 - 16 mars 2009 à 11:02
Christophe7502 - 16 mars 2009 à 11:02
A voir également:
- Commande perl linux
- Invite de commande - Guide
- Commande terminal mac - Guide
- Linux mint 32 bits - Télécharger - Systèmes d'exploitation
- Diskinternals linux reader - Télécharger - Stockage
- Commande dism - Guide
7 réponses
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
15 déc. 2007 à 21:36
15 déc. 2007 à 21:36
Re,
La commande chdir fonctionne car je l'ai teste dans un autre script. Donc, Perl change cd pour chdir???
Tout d'abord il faut faire la différence entre les fonctions internes du Perl et les commandes du GNU/Linux
chdir c'est une fonction qui permet de changer le répertoire dans le script, par défaut le script travaille dans le répertoire courant
C'est avec pwd et ls -gG qu'il y a probleme. Pourtant, en ce qui concerne la ligne $contenu = 'ls -gG' (avec les guillemets simples) je l'ai directement copie d'un exemple sur Perl donne sur Internet.
Perl peut exécuter une commande système de 2 façon :
1.
La fonction system
Cette fonction exécute une commande système et renvoie son code du rétour mais pas sa sortie
2.
L'opérateur qx// ou les guillemets inverses ``
qx// et `` permettent de récuperer la sortie d'une commande système
Il semble donc que Perl contrairement a Sed n'integre pas les commandes Linux.
sed est un streaming editor qui permet de traiter un fichier ligne par ligne, mais il n'intégre pas les commandes système, il les utilises tout simplement
J'ai telecharge le document Perl documentation (2004) mais je n'ai rien trouve parmi les 1714 pages concernant Perl et les commandes Linux. Le probleme est qu'il n'y a pas d'index dans ce document.
Peut être que tu n'as pas bien chercher ;-)
1) a changer de repertoire;
2) a assigner a une variable le contenu du repertoire en question;
3) a afficher le contenu de la variable.
Mais j'ai de la difficulte avec les commandes Linux.
Tu n'as pas besoin de changer le répertoire de travail. Tu dois faire tout simplement
La commande chdir fonctionne car je l'ai teste dans un autre script. Donc, Perl change cd pour chdir???
Tout d'abord il faut faire la différence entre les fonctions internes du Perl et les commandes du GNU/Linux
chdir c'est une fonction qui permet de changer le répertoire dans le script, par défaut le script travaille dans le répertoire courant
C'est avec pwd et ls -gG qu'il y a probleme. Pourtant, en ce qui concerne la ligne $contenu = 'ls -gG' (avec les guillemets simples) je l'ai directement copie d'un exemple sur Perl donne sur Internet.
Perl peut exécuter une commande système de 2 façon :
1.
La fonction system
Cette fonction exécute une commande système et renvoie son code du rétour mais pas sa sortie
2.
L'opérateur qx// ou les guillemets inverses ``
qx// et `` permettent de récuperer la sortie d'une commande système
Il semble donc que Perl contrairement a Sed n'integre pas les commandes Linux.
sed est un streaming editor qui permet de traiter un fichier ligne par ligne, mais il n'intégre pas les commandes système, il les utilises tout simplement
J'ai telecharge le document Perl documentation (2004) mais je n'ai rien trouve parmi les 1714 pages concernant Perl et les commandes Linux. Le probleme est qu'il n'y a pas d'index dans ce document.
Peut être que tu n'as pas bien chercher ;-)
1) a changer de repertoire;
2) a assigner a une variable le contenu du repertoire en question;
3) a afficher le contenu de la variable.
Mais j'ai de la difficulte avec les commandes Linux.
Tu n'as pas besoin de changer le répertoire de travail. Tu dois faire tout simplement
#!/usr/bin/perl use strict;use warnings; my $rep = "/home/lami20j/trash2"; my @ls = qx{ls -gG $rep}; print @ls;
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
15 déc. 2007 à 19:59
15 déc. 2007 à 19:59
Salut,
je vais t'expliquer ça dans un instant ;-)
en revanche, la prochaine fois poste plutôt sur le Forum Programmation ;-)
je vais t'expliquer ça dans un instant ;-)
en revanche, la prochaine fois poste plutôt sur le Forum Programmation ;-)
artagon7
Messages postés
417
Date d'inscription
dimanche 6 novembre 2005
Statut
Membre
Dernière intervention
12 novembre 2024
7
15 déc. 2007 à 20:30
15 déc. 2007 à 20:30
Salut Lami20j,
Oui je me suis apercu apres l'avoir envoye que j'etais dans le mauvais forum!
Oui je me suis apercu apres l'avoir envoye que j'etais dans le mauvais forum!
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
15 déc. 2007 à 21:43
15 déc. 2007 à 21:43
Pour mieux comprendre
#!/usr/bin/perl use strict;use warnings; # répertoire courant /home/lami20j # répertoire de travail /home/lami20j/trash2 # # # répertoire que je vais lister my $rep = "/home/lami20j/trash2"; # je suis dans le répertoire courant print "$ENV{PWD}\n"; # je change de répertoire (à l'interieur de script) # pour réaliser le listing chdir $rep; # je capture la liste de fichiers my @ls = qx{ls -gG $rep}; # je l'affiche print "@ls\n"; # mais je suis toujours dans le répertoire courant print "$ENV{PWD}\n"; __END__l'exécution
lami20j@debian:~$ pwd /home/lami20j lami20j@debian:~$ perl /home/lami20j/trash/artagon.pl /home/lami20j total 22100 -rw-r--r-- 1 0 2007-11-24 18:35 abc -rwxr-xr-x 1 0 2007-11-24 18:35 a.c drwxr-xr-x 7 4096 2007-11-29 23:37 archive_iso -rwxr-xr-x 1 0 2007-11-24 18:35 b.c drwxr-xr-x 9 4096 2007-12-03 21:57 cgi-bin drwxr-xr-x 2 4096 2007-12-09 16:43 exxan -rw-r--r-- 1 26013 2007-11-27 20:47 jeff_astuce_192.168.0.1.odp -rw-r--r-- 1 4152 2007-11-27 20:56 jeff.original -rw-r--r-- 1 68509 2007-11-27 20:45 lan1.png -rw-r--r-- 1 66596 2007-11-27 20:46 lan2.png -rw-r--r-- 1 67955 2007-11-27 20:47 lan3.png -rw-r--r-- 1 0 2007-11-24 18:35 nom.prenom.txt -rw-r--r-- 1 0 2007-12-01 23:44 Op4564646574 drwxr-xr-x 4 4096 2004-08-01 14:26 openquartz -rw-r--r-- 1 22323200 2004-08-01 14:53 OpenQuartzLinux2004.08.01.tar -rw-r--r-- 1 0 2007-12-01 23:44 Opjsdlfjsdlkjf drwxr-xr-x 2 4096 2007-12-08 23:39 wmv /home/lami20j lami20j@debian:~$ pwd /home/lami20j lami20j@debian:~$
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
artagon7
Messages postés
417
Date d'inscription
dimanche 6 novembre 2005
Statut
Membre
Dernière intervention
12 novembre 2024
7
15 déc. 2007 à 22:38
15 déc. 2007 à 22:38
J'ai essaye ton petit script lami20j et ca fonctionne.
Je viens d'effectuer une recherche pour trouver le mot "qx" dans le document Perl documentation et j'ai effectivement trouve des "traces" de qx mais on dirait que les auteurs ne mettent pas trop d'emphase sur ca (la premiere mention est faite a la page 234!! Pourtant, ce n'est pas un point negligeable.
Peut-etre que ce document (ou plutot bible -> 1714 pages) s'adresse avant tout a des gens qui connaisssent bien Perl et non a des debutants.
Merci beaucoup,
Je viens d'effectuer une recherche pour trouver le mot "qx" dans le document Perl documentation et j'ai effectivement trouve des "traces" de qx mais on dirait que les auteurs ne mettent pas trop d'emphase sur ca (la premiere mention est faite a la page 234!! Pourtant, ce n'est pas un point negligeable.
Peut-etre que ce document (ou plutot bible -> 1714 pages) s'adresse avant tout a des gens qui connaisssent bien Perl et non a des debutants.
Merci beaucoup,
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
15 déc. 2007 à 22:53
15 déc. 2007 à 22:53
Regarde ici Opérateurs d'expression rationnelle
voir la partie avec
voir la partie avec
qx/CHAINE/ `CHAINE`comme je te l'ai dit Peut être que tu n'as pas bien chercher ;-) ;-))
Bonjour,
dsl de réactiver un vieu sujet mais j'ai moi aussi des problème avec les commandes linux dans perl.
En fait j'ai surtout un problème quand j'utilise une * dans les commande. Par exemple :
ls /etc/lighttpd/*.tar.gz cette commande dans un script shell marche très bien mais quand je la passe sous perl :
$del=`ls /etc/lighttpd/*.tar.gz`; j'ai l'erreur suivante : ls: /etc/lighttpd/*.tar.gz: No such file or directory
même chose avec $del = qx(ls /etc/lighttpd/*.tar.gz);
Quelqu'un pourrais m'aider?
Merci d'avance.
dsl de réactiver un vieu sujet mais j'ai moi aussi des problème avec les commandes linux dans perl.
En fait j'ai surtout un problème quand j'utilise une * dans les commande. Par exemple :
ls /etc/lighttpd/*.tar.gz cette commande dans un script shell marche très bien mais quand je la passe sous perl :
$del=`ls /etc/lighttpd/*.tar.gz`; j'ai l'erreur suivante : ls: /etc/lighttpd/*.tar.gz: No such file or directory
même chose avec $del = qx(ls /etc/lighttpd/*.tar.gz);
Quelqu'un pourrais m'aider?
Merci d'avance.
artagon7
Messages postés
417
Date d'inscription
dimanche 6 novembre 2005
Statut
Membre
Dernière intervention
12 novembre 2024
7
15 déc. 2007 à 23:22
15 déc. 2007 à 23:22
Merci pour la reference lami20j. Je l'ai mise dans mes liens favoris.