tss tss. Je vais te montrer exactement ce que voit ta commande mount.
[anvil@gruyere ~]$ function mount() {
> for i in "$@"
> do
> echo $i
> done
> }
Cette fonction va nous afficher 1 par ligne les arguments qu'on lui passe.
[anvil@gruyere ~]$ partage="//portable-jp/Mes Documents";
[anvil@gruyere ~]$ mount -t cifs -o password="" ${partage} /home/temp/samba/
-t
cifs
-o
password=
//portable-jp/Mes
Documents
/home/temp/samba/
Voila, donc, analysons :
1. Les 3 premiers arguments sont corrects. Y'avait aucun caractere special, et donc aucune ambiguite.
2. le password="" s'est transforme en password=. Pourquoi ? Simple. C'est le shell qui interprete (toujours) les "" quand elles ne sont pas de-specialisees. Donc ta chaine vide "" visible se transforme en chaine vide invisible (facon de parler hein) avant d'invoquer 'mount', et mount ne la voit donc.. jamais. Preuve donc, s'il en etait besoin, qu'elles ne servaient a rien, ces quotes.
3. la variable $partage non "quotée". Cette sale bete contenait des espaces. Et un backslash que tu as cru bon de mettre. Revenons a sa declaration :
partage="//portable-jp/Mes Documents";
Notre pokemon du futur t'a judicieusement fait la remarque : tu as despecialise le despecialiseur(-ateur?) ! un entre 2 "" c'est un literal, et pas un caractere special du shell. Donc ta variable contenait un , un vrai, du genre qu'on voit et qui reste. Ton nom de repertoire distant n'en contient surement pas lui. Mais reprenons :
mount -t cifs -o password="" ${partage} /home/temp/samba/
Quand tu as invoques ta ligne de commande la, les espaces dans la variable `partage' ont repris tout leur sens, eux. Parce que ta variable n'etait pas entre "". Et effectivement, mount se retrouve avec 2 parametres au lieu d'un. Il se retrouve avec "//portable-jp/Mes" d'un cote, et "Documents" de l'autre.
4. /home/temp/samba/ mount a retrouve literalement ce parametre, mais avec la separation de `partage' en deux, ce que tu croyais etre un point de montage est devenue une erreur de syntaxe. Si tu tapes "mount -t cifs -o password= 1 2 3", tu vas te retrouver exactement avec les memes messages de la part de mount.
Donc au final, les lignes de commande, epurees et correctes sont :
partage=//portable-jp/Mes Documents
ou
partage="//portable-jp/Mes Documents"
(strictement equivalent. Et effectivement, on est pas en C, le `;' a la fin d'une ligne n'est pas une obligation.)
Et donc :
mount -t cifs -o password= "$partage" /home/temp/samba/
Les {} autour du nom de la variable ne sont ici pas necessaires. On peut les mettre (c'est une bonne chose de savoir que ca existe) mais ca sert surtout a ca:
foo=b ; echo a${foo}c ; echo a$fooc
le 1er echo va afficher `abc' et le second affichera `a', parce que la variable `fooc' n'existe pas.
Il existe un advanced bash programming howto, ou quelque chose dans ce nom la. Et un bash programming howto pour les [d]beginners[/d] [d]n00b[/d] debutants. Le `man bash' est une bonne source d'information et ♥♥ zsh ♥♥ est un shell beaucoup plus puissant que bash qui me facilite la vie de tous les jours...
Voila, bonne soiree.