#1 Le 25/11/2012, à 19:47
[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, à 21:56)
Hors ligne
#2 Le 25/11/2012, à 20:08
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, à 20:19
Re : [Résolu] Script
Bonsoir,
Il faut lancer le script en restant dans le même environnement :
. ./scriptJe jette un œil au script et je reviens.
Hors ligne
#4 Le 25/11/2012, à 20:29
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, à 20:35
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
doneHors ligne
#6 Le 25/11/2012, à 20:49
Re : [Résolu] Script
Merci à vous deux mais j'ai eu le même résultat.
Hors ligne
#7 Le 25/11/2012, à 21:03
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, à 21:12
Re : [Résolu] Script
J'ajouterais juste une petite précision :
Il n'est pas nécessaire de faire aussi compliqué que :
. ./scriptIl suffit de faire :
. scriptEt un alias dans le profile des utilisateurs comme le suivant serait assez sympa :
alias script=". script"Sébastien Maccagnoni-Munch - administrateur Linux depuis le XXème siècle
Consultant informatique indépendant - http://www.smm-informatique.fr
Geek et tout plein d'autres choses - http://www.tiramiseb.fr
Hors ligne
#9 Le 25/11/2012, à 21:34
Re : [Résolu] Script
oui ça marche , Merci beaucoup
![]()
Mais je n'ai pas bien compris l'utilité de . ./script
Hors ligne
#10 Le 25/11/2012, à 21:51
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.
Sébastien Maccagnoni-Munch - administrateur Linux depuis le XXème siècle
Consultant informatique indépendant - http://www.smm-informatique.fr
Geek et tout plein d'autres choses - http://www.tiramiseb.fr
Hors ligne
#11 Le 25/11/2012, à 21:59
Re : [Résolu] Script
MERCI beaucoup,maintenant ça devient clair.
Merci à vous tous
)))
Hors ligne