Pages : 1
#1 Le 25/11/2012, à 19: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, à 21:56)
Hors ligne
#2 Le 25/11/2012, à 20: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, à 20: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, à 20: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, à 20: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, à 20: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, à 21: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, à 21: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"
Sébastien Maccagnoni - https://www.maccagnoni.eu - https://www.domotego.com
Hors ligne
#9 Le 25/11/2012, à 21:34
- touttou
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
- 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.
Sébastien Maccagnoni - https://www.maccagnoni.eu - https://www.domotego.com
Hors ligne
#11 Le 25/11/2012, à 21:59
- touttou
Re : [Résolu] Script
MERCI beaucoup,maintenant ça devient clair.
Merci à vous tous )))
Hors ligne
Pages : 1