Rechercher : dans
Par :

Perl et les commandes system

Dernière réponse le 25 fév 2009 à 10:32:42 koa0, le 20 fév 2009 à 13:59:17 
 Signaler ce message aux modérateurs

Bonjour tout le monde,

Le problème est simple. J'utilise unix avec differents groupe de travail( j'ai les droits pour y acceder )
ex:
pole2
cpioc
...
qd je change de groupe avec dtterm via la commande newgrp nomgroupe ça marche parfaitement.
Mais qd je change de groupe via un programme perl en utilisant la ligne de commande.
`newgrp nomgroupe` ou system "newgrp nomgroupe" ou encore exec "newgrp nomgroupe" il n'y a pas d'erreur mais ça ne marche pas.
Si quelqu'un pouvait me donner plus de renseignement sur le comment cela fonctionne et surtout sur le comment faire pour que ça fonctionne.
Merci d'avance car c'est très urgent
Karim

Configuration: Windows XP
Firefox 3.0.6

Meilleures réponses pour « Perl et les commandes system » dans :
Windows 7 Contrôler si votre Pc est infecté . VoirFaire un simple contrôle pour voir si votre PC est infecté ou non Allez dans le menu Démarrer, recherchez "Exécuter", cliquez sur "Exécuter" et tapez la commande system.ini, confirmez en cliquant sur OK. Une fenêtre va s'ouvrir : Si...
ImageMagick - Manipuler les images en ligne de commande VoirImageMagick est un formidable outil en ligne de commande qui permet de manipuler les images. L'avantage de cet outil est qu'il permet: d'automatiser les travaux sur les images (cela évite d'avoir à faire certaines manipulations dans...
Comment récupérer le résultat d'une commande dans une variable VoirComment récupérer le résultat d'une commande dans une variable Préambule Syntaxe Exemples Préambule Il est bien souvent nécessaire de récupérer le résultat d'une commande (ou de son code retour) dans une variable afin de pouvoir...
Commandes UNIX VoirTableau des principales commandes UNIX Commande Unix Description Options ls liste le contenu d'un répertoire -a Affiche tous les fichiers, y compris les fichiers cachés ...
Commandes Linux VoirTableau des principales commandes Linux Commande Description équivalent DOS ls liste le contenu d'un répertoire dir cd change de répertoire cd cd .. répertoire parent cd.. mkdir crée un nouveau...
Perl - Les fichiers VoirLa notion de filehandle On appelle filehandle (traduisez descripteur de fichier), dans un programme Perl, le nom permettant de manipuler une connexion d'entrée-sortie (les entrées-sorties standards vues précédemment sont connues par les filehandles...

1

dubcek, le 20 fév 2009 à 14:19:46

Hello
newgrp group << XX
cmd
cmd
XX

Répondre à dubcek

2

koa0, le 20 fév 2009 à 14:29:22

Merci pour la reponse si rapide.
Je debute en Perl et si tu pouvez m'en dire plus je t'en remercierai
Karim

Répondre à koa0

3

dubcek, le 20 fév 2009 à 14:34:51

Ca c'est ce qu'il faut faire pour exécuter des commandes en newgrp dans un shell Unix. Comment exécutes-tu la commande en perl ?
essaye system("newgrp group <<XX ; cmd ; cmd\
XX");

Répondre à dubcek

4

koa0, le 20 fév 2009 à 14:39:45

Je fais bien system("newgrp group);.
Par contre je ne met pas <<XX.
Peux tu me dire à quoi correspond les XX et ce qu'on fait quand on assemble newgrp group <<XX.
Merci

Répondre à koa0

5

dubcek, le 20 fév 2009 à 14:44:21

Cela redirige les commandes jusqu'a XX en début de ligne.
tu peux tester en shell

newgrp group ; id -a ; echo > fichier1 ; ls -l fichier1
newgrp group << XX
id -a ; echo > fichier2 ; ls -l fichier2
XX

Répondre à dubcek

6

koa0, le 20 fév 2009 à 14:51:31

Je te remercie vraiment. Je vais le tester
Bonne aprem
Karim

Répondre à koa0

7

koa0, le 20 fév 2009 à 15:05:52

Desolé de te deranger une nouvelle fois,
J'ai testé la commande et ça n'a pas marché.
J'explique ce que j'ai fait. Sous unix et perl. je dois faire l'erreur du debutant
.
.
.
system("newgrp pole2 << XX");
.
.
.

et là j'ai une erreur
Bareword found where operator expected at /home/st27247/ScriptPerl/EssaiScriptKarim/BOATEST_13_02_09/creationIHM.pl line 538, near "print "Les"
(Might be a runaway multi-line "" string starting on line 530)
(Do you need to predeclare print?)
syntax error at /home/st27247/ScriptPerl/EssaiScriptKarim/BOATEST_13_02_09/creationIHM.pl line 530, near "XX;"

Répondre à koa0

8

dubcek, le 20 fév 2009 à 15:09:06

Le plus simple, tu mets tes commandes newgrp ... dans un script, tu le rends exécutable
chmod u+x script
et depuis perl
system("script");

Répondre à dubcek

9

koa0, le 20 fév 2009 à 15:30:43

Merci de prendre du temps avec moi.
J'ai essayé cette façon de faire mais là des qu'on arrive sur la ligne newgrp.... du script ksh ça me bloque. On voit quand même que le script est lancé.
script ksh:
#!/bin/ksh
echo "debut de programme"
newgrp pole2
echo "fin de programme"

resultat:

debut de programme

Répondre à koa0

11

koa0, le 20 fév 2009 à 15:39:44

Info complementaires

Si je lance le script ksh ci dessu sans perl, donc tout seul, ça marche bien. Par contre si je lance via perl il bloque en arrivant à la ligne newgrp pole2.
Merci des reponses

Répondre à koa0

10

dubcek, le 20 fév 2009 à 15:37:43

Et comme ca
#!/bin/ksh
echo "debut de programme"
newgrp pole2 <<XX
echo "fin de programme"
XX

Répondre à dubcek

12

koa0, le 20 fév 2009 à 15:45:02

A priori ça bloque plus sous le script.
Je vais aller en profondeur car maintenant il faut que par rapport a ce groupe je source des environnements.
Je te tiens au courant.
Ça a été très sympa de ta part
Karim

Répondre à koa0

13

koa0, le 20 fév 2009 à 16:04:36

Comme tu m'as beaucoup aidé je reviens vers toi en esperant ne pas trop t'ennuyer.
Je suis en train de sourcer un environnement en procedant de la façon suivante:
#!/bin/ksh

echo "appel du programme essai"
# Environnement de marcel
newgrp pole2<<XX

. /home/pole2/atelier_pole2_gdc_a380<<YY
echo "---------------------------------------------------------------"
echo "Atelier marcel => ${Loc_marcel}"
echo "Espace de developpement => ${ESPACE_DEV}"
echo "---------------------------------------------------------------"
echo "fin du programme essai"
XX
YY

resultat:
il bloque à la ligne qd je lance le script via perl
. /home/pole2/atelier_pole2_gdc_a380<<YY

Répondre à koa0

14

dubcek, le 20 fév 2009 à 16:09:54

Peut être:
newgrp pole2<<XX

. /home/pole2/atelier_pole2_gdc_a380<<YY
echo "---------------------------------------------------------------"
echo "Atelier marcel => ${Loc_marcel}"
echo "Espace de developpement => ${ESPACE_DEV}"
echo "---------------------------------------------------------------"
echo "fin du programme essai"
YY
XX


le << YY est-il nécessaire ?

Répondre à dubcek

15

koa0, le 20 fév 2009 à 16:16:32

Effectivement <<YY n'est pas necessaire et il ne bloque plus sans. Par contre dans
echo "---------------------------------------------------------------"
echo "Atelier marcel => ${Loc_marcel}"
echo "Espace de developpement => ${ESPACE_DEV}"
echo "---------------------------------------------------------------"
il doit m'afficher
---------------------------------------------------------------
Atelier marcel => /home/pole2/FCDC/FCDC/ATELIER
Espace de developpement => /home/pole2/FCDC/FCDC
---------------------------------------------------------------
et il m'affiche
---------------------------------------------------------------
Atelier marcel => /home/cpiom_c/FCDC/FCDC/ATELIER
Espace de developpement => /home/cpiom_c/FCDC/FCDC
---------------------------------------------------------------
est ce que je me trompe dans la façon dont j'appelle la commande pour sourcer?

Répondre à koa0

17

koa0, le 20 fév 2009 à 16:24:26

Je suis désolé car je vais devoir m'absenter. Je récupère la discussion ce soir.
Merci beaucoup pour le coup de main
Karim

Répondre à koa0

16

dubcek, le 20 fév 2009 à 16:23:05

Le . source bien
les variables sont définies dans /home/pole2/atelier_pole2_gdc_a380 ?
sont-elles exportées ?
dans /home/pole2 pole2 est un répertoire, dans newgrp pole2 pole2 est un groupe, 2 choses différentes

Répondre à dubcek

18

koa0, le 22 fév 2009 à 00:44:51

Bonsoir,
désole mais je n'ai pas pu répondre avant. Effectivement pole2 est un groupe mais est aussi un répertoire.
Ce que doit faire le programme c'est de se mettre sur le groupe pole2 pour pouvoir ensuite lancer un environnement qui se trouve sous un répertoire pole2(qui a la même nom que le groupe dans ce cas).
Je suppose que je n'aurai pas de réponse ce soir alors bonne soirée à tous
Karim

Répondre à koa0

19

dubcek, le 22 fév 2009 à 09:11:18

Newgrp pole2 va mettre le shell dans le groupe pole2, ce qui va permettre de créer des fichiers appartenant au groupe pole2. pour le reste, comme le choix du répertoire, il n'y a rien d'automatique, c'est au script d'aller explicitement dans /home/pole2

Répondre à dubcek

20

koa0, le 23 fév 2009 à 08:17:15

Bonjour
Je vais essayer de faire ça et je te tiens au courant
Karim

Répondre à koa0

21

koa0, le 23 fév 2009 à 09:35:16

Bon j'ai essayé. En fait le probleme vient toujours de fait qu'on ne change pas de groupe. J'essai de changer de groupe et j'affiche l'id mais on est toujours sur l'ancien groupe.
Je m'explique:
on est sous le groupe cpioc
debut du programme perl
...
system ("essai");

debut du programme essai pour se mettre sous le groupe pole2
#!/bin/ksh
echo "appel du programme essai"
# Definition de la version Marcel a utiliser
export MARCEL_ENV="/home/opt/MARCEL/0000750_AA/MARCEL_ENV/marcel_env"
# Environnement de marcel
newgrp pole2<<"$grp"

${grp}
fin du programme essai
On revient au programme perl
my $id = `id`
print "$id";
et là je reste sur le groupe cpioc. Je comprend pas
Karim

Répondre à koa0

22

dubcek, le 23 fév 2009 à 09:44:52
  • +1

On ne reste dans le groupe pole2 que entre
newgrp pole2<< XX
<ici je suis pole2>
XX
je ne suis plus pole2

si le prog perl doit être pole2, il faut faire
newgrp pole2<< XX
< prog Perl>
XX

Répondre à dubcek

23

koa0, le 23 fév 2009 à 14:03:42

D'accord je comprend mieux maintenant. Il va falloir que je repense toute la conception de mon programme PERL qui fait quelque milliers de lignes. Bon je ne vais pas désespérer, j'essaie ça aujourd'hui ou demain et je te tiens au courant.
Merci vraiment pour ton coup de main
Bonne journée
Karim

Répondre à koa0

24

 koa0, le 25 fév 2009 à 10:32:42

Bonjour,
Je te remercie pour tes explications. Effectivement j'ai corrigé mon architecture et maintenant ça marche.
Bonne journée
A bientôt
Karim

Répondre à koa0
Collection CommentÇaMarche.net