Perl et les commandes system

Fermé
koa0 - 20 févr. 2009 à 13:59
 koa0 - 25 févr. 2009 à 10:32
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
A voir également:

12 réponses

dubcek Messages postés 18753 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 7 novembre 2024 5 619
23 févr. 2009 à 09:44
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
2
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
0
Bonjour,
Je te remercie pour tes explications. Effectivement j'ai corrigé mon architecture et maintenant ça marche.
Bonne journée
A bientôt
Karim
0
dubcek Messages postés 18753 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 7 novembre 2024 5 619
20 févr. 2009 à 14:19
hello
newgrp group << XX
cmd
cmd
XX
0
Merci pour la reponse si rapide.
Je debute en Perl et si tu pouvez m'en dire plus je t'en remercierai
Karim
0
dubcek Messages postés 18753 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 7 novembre 2024 5 619
20 févr. 2009 à 14:34
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");
0
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
dubcek Messages postés 18753 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 7 novembre 2024 5 619
20 févr. 2009 à 14:44
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
0
Je te remercie vraiment. Je vais le tester
Bonne aprem
Karim
0
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;"
0
dubcek Messages postés 18753 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 7 novembre 2024 5 619
20 févr. 2009 à 15:09
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");
0
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
0
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
0
dubcek Messages postés 18753 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 7 novembre 2024 5 619
20 févr. 2009 à 15:37
et comme ca
#!/bin/ksh
echo "debut de programme"
newgrp pole2 <<XX
echo "fin de programme"
XX
0
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
0
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
0
dubcek Messages postés 18753 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 7 novembre 2024 5 619
20 févr. 2009 à 16:09
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 ?
0
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?
0
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
0
dubcek Messages postés 18753 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 7 novembre 2024 5 619
20 févr. 2009 à 16:23
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
0
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
0
dubcek Messages postés 18753 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 7 novembre 2024 5 619
22 févr. 2009 à 09:11
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
0
Bonjour
Je vais essayer de faire ça et je te tiens au courant
Karim
0
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
0