Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

[bash] commande cd dans un script

3 réponses
Avatar
hugolino
Bonjour à tous

Dans un script bash, je veux à la fin du script que l'utilisateur se
retrouve dans un répertoire donné. Donc dans mon script, (la variable
$dir contenant "/mnt/win") je mets:
8<------------------------------------
ChangeDir="cd"$dir
echo "1 XXX"
CdDirReussi= `echo $ChangeDir `
echo "2 XXX"
8<------------------------------------

Et à l'exécution j'ai:
8<------------------------------------
1 XXX
/usr/local/bin/Mo: cd/mnt/win: Aucun fichier ou répertoire de ce type
2 XXX
8<------------------------------------

"Idiot me dis-je, j'ai oublié l'espace entre "cd" et la variable $dir,
donc je corrige (ChangeDir="cd "$dir)
Et là à l'excution, je n'ai plus d'erreur, mais le script ne cherche pas
non plus à exécuter le changement de répertoire.

On a l'impression que le shell ne cherche à exécuter que les commandes
foireuses qu'on peut lui passer mais pas les bonnes ! C'est pas ça qui va
aider les newbies (neuneu ?) comme moi.


J'ai essayé ça dans un xterm:
8<------------------------------------
08:50pm hugo@Deborah ~ $ dir="/mnt/win"
08:51pm hugo@Deborah ~ $ echo $dir
/mnt/win
08:51pm hugo@Deborah ~ $ ChangeDir= "cd "$dir
bash: cd /mnt/win: Aucun fichier ou répertoire de ce type
08:51pm hugo@Deborah ~ $ dir="/mnt/win"
08:52pm hugo@Deborah ~ $ echo $dir
/mnt/win
08:52pm hugo@Deborah ~ $ CdDirReussi= "cd "$dir
bash: cd /mnt/win: Aucun fichier ou répertoire de ce type
08:52pm hugo@Deborah ~ $ echo $CdDirReussi

08:52pm hugo@Deborah ~ $ cd $dir <-- [1]
08:52pm hugo@Deborah /mnt/win $
8<------------------------------------

Donc j'ai bidouillé, et j'ai essayé dans mon script:
8<------------------------------------
echo "1 XXX"
cd $dir <-- [2]
echo "2 XXX"
CdDirReussi= "cd "$dir
echo "3 XXX"
CdDirReussi= `cd $dir`
echo "4 XXX"
CdDirReussi= echo "cd "$dir
echo "5 XXX"
CdDirReussi= echo `cd $dir`
echo "6 XXX"
8<------------------------------------
et à l'exécution ça donne:
8<------------------------------------
1 XXX <-- [2] Que Dalle
2 XXX
/usr/local/bin/Mo: cd /mnt/win: Aucun fichier ou répertoire de ce type
3 XXX
4 XXX
cd /mnt/win
5 XXX

6 XXX
8<------------------------------------

Et le changement de répertoire ne se fait pas...


Donc on voit que la commande [1] qui marche dans un xterm, ne marche pas
dans un script [2].

De plus, un oeil aguerri remarquera que si on cherche à faire un cd vers
un répertoire inconnu, il y a un ":" dans le message d'erreur entre "cd"
et le nom du répertoire par exemple:
bash: cd: WinBlop: Aucun fichier ou répertoire de ce type

Et en oeil de plus en plus aguerri par l'énervement de ne pas comprendre
remarque que dans un xterm le message d'erreur previent de bash alors
que dans mon script il provient de '/usr/local/bin/Mo' (mon script)

Le problème vient-il du fait que sous vim la coloration syntaxique me
met le "cd" en jaune ? "cd" serait une commande réservée dans les
scripts ? (Cherché dans la doc, pas trouvé)

Bon "un neuneu est un newbie qui ne lit pas la doc", on est d'accord ?
Mais comment appelle-t-on un newbie qui n'a pas la bonne doc (et
pourtant j'ai 'Linux in a Nutshell', 'Le Système Linux' et de la doc que
j'ai récupérée sur le net) ?

Merci de m'avoir lu...


--
> dvips -o $@ $<
Faut faire gffe de pas te couper avec ton truc, t'as mis des ciseaux ($<)
partout :))
-+- Dom in Guide du linuxien pervers - "J'aime pas les Makefile !" -+-

3 réponses

Avatar
Philippe Delsol
Hugolino a écrit dans le message ...
Bonjour à tous

Dans un script bash, je veux à la fin du script que l'utilisateur se
retrouve dans un répertoire donné. Donc dans mon script, (la variable
$dir contenant "/mnt/win") je mets:
8<------------------------------------
ChangeDir="cd"$dir
echo "1 XXX"
CdDirReussi= `echo $ChangeDir `
echo "2 XXX"
8<------------------------------------

Et à l'exécution j'ai:
8<------------------------------------
1 XXX
/usr/local/bin/Mo: cd/mnt/win: Aucun fichier ou répertoire de ce type
2 XXX
8<------------------------------------

"Idiot me dis-je, j'ai oublié l'espace entre "cd" et la variable $dir,
donc je corrige (ChangeDir="cd "$dir)
Et là à l'excution, je n'ai plus d'erreur, mais le script ne cherche pas
non plus à exécuter le changement de répertoire.

On a l'impression que le shell ne cherche à exécuter que les commandes
foireuses qu'on peut lui passer mais pas les bonnes ! C'est pas ça qui va
aider les newbies (neuneu ?) comme moi.


J'ai essayé ça dans un xterm:
8<------------------------------------
08:50pm ~ $ dir="/mnt/win"
08:51pm ~ $ echo $dir
/mnt/win
08:51pm ~ $ ChangeDir= "cd "$dir
bash: cd /mnt/win: Aucun fichier ou répertoire de ce type
08:51pm ~ $ dir="/mnt/win"
08:52pm ~ $ echo $dir
/mnt/win
08:52pm ~ $ CdDirReussi= "cd "$dir
bash: cd /mnt/win: Aucun fichier ou répertoire de ce type
08:52pm ~ $ echo $CdDirReussi

08:52pm ~ $ cd $dir <-- [1]
08:52pm /mnt/win $
8<------------------------------------

Donc j'ai bidouillé, et j'ai essayé dans mon script:
8<------------------------------------
echo "1 XXX"
cd $dir <-- [2]
echo "2 XXX"
CdDirReussi= "cd "$dir
echo "3 XXX"
CdDirReussi= `cd $dir`
echo "4 XXX"
CdDirReussi= echo "cd "$dir
echo "5 XXX"
CdDirReussi= echo `cd $dir`
echo "6 XXX"
8<------------------------------------
et à l'exécution ça donne:
8<------------------------------------
1 XXX <-- [2] Que Dalle
2 XXX
/usr/local/bin/Mo: cd /mnt/win: Aucun fichier ou répertoire de ce type
3 XXX
4 XXX
cd /mnt/win
5 XXX

6 XXX
8<------------------------------------

Et le changement de répertoire ne se fait pas...


Donc on voit que la commande [1] qui marche dans un xterm, ne marche pas
dans un script [2].


C'est un comportement normal du bash et de tout shell en général ...
Quand tu exécutes ton script tu lances un nouveau shell.
La commande "cd" reste propre à ce nouveau shell (le cd s'exécute dans ce
nouveau shell).
Quand tu quittes le script tu reviens au contexte initial (ton xterm avec
l'environnement de départ).

De plus, un oeil aguerri remarquera que si on cherche à faire un cd vers
un répertoire inconnu, il y a un ":" dans le message d'erreur entre "cd"
et le nom du répertoire par exemple:
bash: cd: WinBlop: Aucun fichier ou répertoire de ce type

Et en oeil de plus en plus aguerri par l'énervement de ne pas comprendre
remarque que dans un xterm le message d'erreur previent de bash alors
que dans mon script il provient de '/usr/local/bin/Mo' (mon script)

Le problème vient-il du fait que sous vim la coloration syntaxique me
met le "cd" en jaune ? "cd" serait une commande réservée dans les
scripts ? (Cherché dans la doc, pas trouvé)

Bon "un neuneu est un newbie qui ne lit pas la doc", on est d'accord ?
Mais comment appelle-t-on un newbie qui n'a pas la bonne doc (et
pourtant j'ai 'Linux in a Nutshell', 'Le Système Linux' et de la doc que
j'ai récupérée sur le net) ?

Merci de m'avoir lu...


Philippe


--
dvips -o $@ $<
Faut faire gffe de pas te couper avec ton truc, t'as mis des ciseaux ($<)

partout :))
-+- Dom in Guide du linuxien pervers - "J'aime pas les Makefile !" -+-



Avatar
Philippe Delsol
Philippe Delsol a écrit dans le message
<3ff7eb5a$0$22307$...

Hugolino a écrit dans le message ...
Bonjour à tous

Dans un script bash, je veux à la fin du script que l'utilisateur se
retrouve dans un répertoire donné. Donc dans mon script, (la variable
$dir contenant "/mnt/win") je mets:



[snip]

Et le changement de répertoire ne se fait pas...


Donc on voit que la commande [1] qui marche dans un xterm, ne marche pas
dans un script [2].


C'est un comportement normal du bash et de tout shell en général ...
Quand tu exécutes ton script tu lances un nouveau shell.
La commande "cd" reste propre à ce nouveau shell (le cd s'exécute dans ce
nouveau shell).
Quand tu quittes le script tu reviens au contexte initial (ton xterm avec
l'environnement de départ).


Ooopps j'ai oublié la solution !!!

Il faut :
- enlever la première ligne du script qui doit commencer par "#!/bin/bash"
- et faire un "source" du script dans le xterm : #source mon_script
Dans ce cas ça ne relance pas un nouveau shell, le script est exécuté dans
l'environnement initial et le cd se fait dans cet environnement.

De plus, un oeil aguerri remarquera que si on cherche à faire un cd vers
un répertoire inconnu, il y a un ":" dans le message d'erreur entre "cd"
et le nom du répertoire par exemple:
bash: cd: WinBlop: Aucun fichier ou répertoire de ce type

Et en oeil de plus en plus aguerri par l'énervement de ne pas comprendre
remarque que dans un xterm le message d'erreur previent de bash alors
que dans mon script il provient de '/usr/local/bin/Mo' (mon script)

Le problème vient-il du fait que sous vim la coloration syntaxique me
met le "cd" en jaune ? "cd" serait une commande réservée dans les
scripts ? (Cherché dans la doc, pas trouvé)

Bon "un neuneu est un newbie qui ne lit pas la doc", on est d'accord ?
Mais comment appelle-t-on un newbie qui n'a pas la bonne doc (et
pourtant j'ai 'Linux in a Nutshell', 'Le Système Linux' et de la doc que
j'ai récupérée sur le net) ?

Merci de m'avoir lu...


Philippe


--
dvips -o $@ $<
Faut faire gffe de pas te couper avec ton truc, t'as mis des ciseaux ($<)

partout :))
-+- Dom in Guide du linuxien pervers - "J'aime pas les Makefile !" -+-






Avatar
David LE BOURGEOIS

Bonjour à tous


Bonsoir.


Dans un script bash, je veux à la fin du script que l'utilisateur se
retrouve dans un répertoire donné. Donc dans mon script, (la variable
$dir contenant "/mnt/win") je mets:
8<------------------------------------
ChangeDir="cd"$dir
echo "1 XXX"
CdDirReussi= `echo $ChangeDir `
echo "2 XXX"
8<------------------------------------

Et à l'exécution j'ai:
8<------------------------------------
1 XXX
/usr/local/bin/Mo: cd/mnt/win: Aucun fichier ou répertoire de ce type
2 XXX
8<------------------------------------

"Idiot me dis-je, j'ai oublié l'espace entre "cd" et la variable $dir,
donc je corrige (ChangeDir="cd "$dir)
Et là à l'excution, je n'ai plus d'erreur, mais le script ne cherche pas
non plus à exécuter le changement de répertoire.

On a l'impression que le shell ne cherche à exécuter que les commandes
foireuses qu'on peut lui passer mais pas les bonnes ! C'est pas ça qui va
aider les newbies (neuneu ?) comme moi.


J'ai essayé ça dans un xterm:
8<------------------------------------
08:50pm ~ $ dir="/mnt/win"
08:51pm ~ $ echo $dir
/mnt/win
08:51pm ~ $ ChangeDir= "cd "$dir
bash: cd /mnt/win: Aucun fichier ou répertoire de ce type
08:51pm ~ $ dir="/mnt/win"
08:52pm ~ $ echo $dir
/mnt/win
08:52pm ~ $ CdDirReussi= "cd "$dir
bash: cd /mnt/win: Aucun fichier ou répertoire de ce type


Ici, bash renvoie une erreur et signale qu'il ne trouve pas le fichier
'cd /mnt/win', qui ne doit durement pas exister.

08:52pm ~ $ echo $CdDirReussi

08:52pm ~ $ cd $dir <-- [1]
08:52pm /mnt/win $
8<------------------------------------

Donc j'ai bidouillé, et j'ai essayé dans mon script:
8<------------------------------------
echo "1 XXX"
cd $dir <-- [2]
echo "2 XXX"
CdDirReussi= "cd "$dir
echo "3 XXX"
CdDirReussi= `cd $dir`
echo "4 XXX"
CdDirReussi= echo "cd "$dir
echo "5 XXX"
CdDirReussi= echo `cd $dir`
echo "6 XXX"
8<------------------------------------
et à l'exécution ça donne:
8<------------------------------------
1 XXX <-- [2] Que Dalle
2 XXX
/usr/local/bin/Mo: cd /mnt/win: Aucun fichier ou répertoire de ce type
3 XXX
4 XXX
cd /mnt/win
5 XXX

6 XXX
8<------------------------------------

Et le changement de répertoire ne se fait pas...


Donc on voit que la commande [1] qui marche dans un xterm, ne marche pas
dans un script [2].

De plus, un oeil aguerri remarquera que si on cherche à faire un cd vers
un répertoire inconnu, il y a un ":" dans le message d'erreur entre "cd"
et le nom du répertoire par exemple:
bash: cd: WinBlop: Aucun fichier ou répertoire de ce type


Dans ce cas, bash signale une erreur, puis c'est autour de cd d'annoncer
un incident.
Ce n'est pas du tout la même erreur rencontrée plus haut. C'est là que
les : font la différence.

Exemple :

~/tmp $ pwd
/home/famille/david/tmp
~/tmp $ "cd /mnt/"
zsh: aucun fichier ou répertoire de ce type: cd /mnt/
~/tmp $ eval "cd /mnt/"
/mnt $ pwd
/mnt



Et en oeil de plus en plus aguerri par l'énervement de ne pas comprendre
remarque que dans un xterm le message d'erreur previent de bash alors
que dans mon script il provient de '/usr/local/bin/Mo' (mon script)

Le problème vient-il du fait que sous vim la coloration syntaxique me
met le "cd" en jaune ? "cd" serait une commande réservée dans les
scripts ? (Cherché dans la doc, pas trouvé)


~/tmp $ which cd
cd: shell built-in command


Bon "un neuneu est un newbie qui ne lit pas la doc", on est d'accord ?
Mais comment appelle-t-on un newbie qui n'a pas la bonne doc (et
pourtant j'ai 'Linux in a Nutshell', 'Le Système Linux' et de la doc que
j'ai récupérée sur le net) ?


man bash devrait suffir.


Merci de m'avoir lu...




Exemples en vrac :-) :

~/tmp $ pwd
/home/famille/david/tmp
~/tmp $ echo cd / > cdroot
~/tmp $ . ./cdroot
/ $ pwd
/


~/tmp $ pwd
/home/famille/david/tmp
~/tmp $ cat cdhome
#!/bin/sh

rep="/home"
cdrep="cd $rep"

eval "$cdrep"
~/tmp $ . ./cdhome
/home $ pwd
/home



--
David LE BOURGEOIS