Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 25/11/2012, à 18:47

touttou

[Résolu] Script

Salut tout le monde,
bon j'ai un exercice à resoudre:

écrire un script qui permet aux utilisateurs de travailler sous le repertoire de groupe s'ils tapent "g" ou sous leur répertoire d'utilisateur s'ils tapent "u".
NB: on a 4 utilisateurs:
user1 appartient à group 1;
user2 appartient à group 1;
user3 appartient à group 2;
user4 appartient à group 2;


voici le code que j'ai tapé:

echo "veuillez saisir U si vous voulez travailler sous votre repertoire et G si vous voulez travailler sous le repertoire du groupe";
read x ;
while [ $x != 'g' ] && [ $x != 'u' ];
do
echo "veuillez repeter la saisie";
read x;
done
if [ $x = 'g' ];
then
case $USER in
"user1" )
cd /home/group1;;
"user2" )
cd /home/group1;;
"user3" )
cd /home/group2;;
"user4" )
cd /home/group2;;
esac
fi
 



lors de l'execution:


  root@amal-Inspiron-N5110:/home/amal# su user2
$ pwd
/home/amal
$ ./script
veuillez saisir U si vous voulez travailler sous votre repertoire et G si vous voulez travailler sous le repertoire du groupe
g
$ pwd
/home/amal  



normalement lorseque je tape pwd il m'affiche /home/group1

Merci d'avance

Dernière modification par touttou (Le 25/11/2012, à 20:56)

Hors ligne

#2 Le 25/11/2012, à 19:08

elendil

Re : [Résolu] Script

Salut,

Je ne vais pas pouvoir te donner une solution mais le résultat est tout à fait normal.
En effet lorsque tu lance un script, il lance une nouvelle "instance bash" dans laquelle il se déplace bien vers le dossier que tu veux mais lorsque le script se termine, il revient au bash à l'état tel qu'il était avant le lancement du script ;-)
Du coup tu n'as "pas bougé".

J'aurais pensé à modifier les variable d'environnement mais ça ne mettra pas le bash précédent le script à jour . . . .

Sinon je ne vois pas comment faire sans lancer un nouveau terminal ou une nouvelle instance bash....

Bon courage,

Elendil

Hors ligne

#3 Le 25/11/2012, à 19:19

pingouinux

Re : [Résolu] Script

Bonsoir,
Il faut lancer le script en restant dans le même environnement :

. ./script

Je jette un œil au script et je reviens.

Hors ligne

#4 Le 25/11/2012, à 19:29

elendil

Re : [Résolu] Script

@pingouinux : Le fait de mettre le point devant signifie de le lancer dans l'environnement courant ?
C'est pour ça les . ~/.bashrc dans le /etc/profile ?

Hors ligne

#5 Le 25/11/2012, à 19:35

pingouinux

Re : [Résolu] Script

@elendil #4 : C'est exact. Ces 2 lignes sont équivalentes :

. ./script
source ./script

@touttou : Voici une suggestion pour ton script :

while true
do
   echo "Veuillez saisir u si vous voulez travailler sous votre repertoire ou g si vous voulez travailler sous le répertoire du groupe";
   read x ;
   case $x in
      g) case $USER in
            "user1"|"user2" ) cd /home/group1;;
            "user3"|"user4" ) cd /home/group2;;
         esac
         break;;
      u) cd; break;;
      *) echo "Veuillez répéter la saisie (u/g)";;
   esac
done

Hors ligne

#6 Le 25/11/2012, à 19:49

touttou

Re : [Résolu] Script

Merci à vous deux mais j'ai eu le même résultat.

Hors ligne

#7 Le 25/11/2012, à 20:03

elendil

Re : [Résolu] Script

@pingouinux : Merci je viens d'apprendre un truc important dont je n'avais jamais fais attention !

@touttou :
Tu as essayé avec le '.' avant ton ./script ?

Hors ligne

#8 Le 25/11/2012, à 20:12

tiramiseb

Re : [Résolu] Script

J'ajouterais juste une petite précision :

Il n'est pas nécessaire de faire aussi compliqué que :

. ./script

Il suffit de faire :

. script

Et un alias dans le profile des utilisateurs comme le suivant serait assez sympa :

alias script=". script"

Hors ligne

#9 Le 25/11/2012, à 20:34

touttou

Re : [Résolu] Script

oui ça marche , Merci beaucoup smile smile smile
Mais je n'ai pas bien compris l'utilité de . ./script

Hors ligne

#10 Le 25/11/2012, à 20:51

tiramiseb

Re : [Résolu] Script

Lorsque tu exécutes un script, ça lance une nouvelle instance du shell. Et toutes les commandes dans le script sont exécutées dans cette nouvelle instance. À la fin de ton script, ça ferme l'instance, ça rend la main dans l'état dans lequel c'était avant le lancement du script, le "cd" n'aura pas affecté ton shell.

La commande ".", qui est un synonyme de "source", exécute le contenu du fichier pointé comme si tu le tapais dans le shell courant. Donc à la fin du script, le "cd" aura affecté le shell courant.

Hors ligne

#11 Le 25/11/2012, à 20:59

touttou

Re : [Résolu] Script

MERCI beaucoup,maintenant ça devient clair.
Merci à vous tous smile)))

Hors ligne