Heeelp! Bash script et variable contenant des caractères spéciaux

DEB 4.9.0-8 testing amd-64

Bonjour,
Pour connecter mes utilisateurs à leurs dossiers perso sur un serveur NAS. je fait un script qui demande leur mot de passe pour initier la connexion avec mount. Ne connaissant pas les mots de passe de mes utilisateurs il m’est totalement impossible de prédire lequel utiliser pour le dossier utilisateur.

#!/bin/bash
Identifiant=$(zenity --entry --title “ID” --text “Identifiant domaine” )
Pasword=$(zenity --entry --title “Pwd” --text “Mot de passe” )
sudo mount -t cifs -o username=$Identifiant,password=$Password \\\\NAS\\$Identifiant /media/user

Admettons que le mot de passe soit [P@ssw&rd!]… je me retrouve avec du grand n’importe quoi en interprétation du mot de passe passé en variable. Pourtant un écho de la variable passe bien entre les '. je ne comprends pas ce qui coince

j’ai essayé:
“…,password=’”$Password"’… ça fige la commande mount…
“…,password=\’”$Password\’" rien de mieux
“…,password=\’$Password\’” pas mieux

, je n’y comprends rien help please…

Tu as essayé plutôt de mettre tes quotes autour de tout l’argument du -o ?

sudo mount -t cifs -o "username=$Identifiant,password=$Password" \\\\NAS\\$Identifiant /media/user

[edit: et sinon, ca ne bloquerait pas juste parceque tu n’as pas fourni de domain ?]

avec le & ça pose un pb à bash

#!/bin/bash
set -x
pass=$1
echo $pass

ça donne

bash essai P@ssw&rd!
[1] 6486
bash: rd! : commande introuvable

pour être ok je suis obligé de mettre des guillemets en entrée

bash essai "P@ssw&rd!"
+ pass='P@ssw&rd!'
+ echo 'P@ssw&rd!'
P@ssw&rd!

https://abs.traduc.org/abs-5.3-fr/ch05.html

oublit domain: non, la commande fonctionne en direct bash sans les variable en double ’ autour du mot de passe.
Mais là, y a pb vu que c’est une variable… et le &…

Grantoudbab, du coup comment puis je accepter une telle entrée variable ?
var=’"$(zenity blabla)"’ ???

désolé je n’utilise pas zenity
je pense que tu connais déjà ça
https://linuxconfig.org/how-to-use-graphical-widgets-in-bash-scripts-with-zenity

https://bash.cyberciti.biz/guide/Zenity:_Shell_Scripting_with_Gnome#Your_first_GUI_dialog_using_zenity

vite fait comme ça

#!/bin/bash
set -x
#pass=$1
#echo $pass
pass=$(zenity  zenity --entry --title "pass" --text "password svp")
echo $pass

en saisissant le texte sans guillemets: P@ssw&rd!

bash essai
++ zenity zenity --entry --title pass --text 'password svp'
+ pass='P@ssw&rd!'
+ echo 'P@ssw&rd!'
P@ssw&rd!

donc le contenu est ok après il faut jouer avec les cotes simple ou les guillemets pour que mount n’interprete pas le &

exemple dans un script qui fonctionne je prépare une commande ffmpeg comme ça, et le filtre zoompan est bien appliqué

# entête de commande
FULL_SCRIPT="ffmpeg -hide_banner -loglevel error -y -i $line "
#
# filtre pour zoomer durée pour chaque image 5*25= 5 secondes
FULL_SCRIPT+=" -filter_complex zoompan=z='zoom+0.002':d=5*25:s=$size "
#
# ajout des options pour la fin de commande 
# on travaille en ts pour pouvoir concaténer
#
FULL_SCRIPT+=" -codec:v libx264 -pix_fmt yuv420p -profile:v baseline -tune stillimage $line.ts "
#
$FULL_SCRIPT

Oui en effet, ça fonctionne en texte brut encadré par ‘…’. et même en écho $var, mais pas en variable passé à une commande pas moyen il est interprété direct comme une commande non interractive ou combiné par l’interprêteur…
Du coup on me demande de le remplacer par &amp. La saisi de ceci en mot de passe fonctionne tres bien il me faut donc scanner la string et remplacer toute les occurences par ça. Et là ca passe.

Une idée pour remplacer toutes les occurences d’un coup dans la variable ?

fpassword="${password//&/&}"
me donne bien “P@ssw&rd”

mais ca ne passe pas avec la commande mount… grmlgrml…
et je retest aujourd’hui juste …,password=$pw… tin ca marche…
y aurrait il une variable globale ou bash qui pourrait interférer avec une variable “$password” ???
ou mon cerveau a t’il juste eternué pendant 6 heures hier ??? :crazy_face:

man sed

Ton password réécrit sera obtenu avec un truc du genre:

echo $password | sed -i -e "s/\&/\&amp/g"

Mais:
1/ pas certain de la syntaxe de sed pour traiter la sortie standard, c’est peut être

echo $password | sed -i -e "s/\&/\&amp/g" -

2/un peu rouillé en regexp, pas certain que la syntaxe que j’aie utilisée pour le rechercher/remplacer soit la bonne:
si quelqu’un est meilleur que moi en regexp, qu’il parle maintenant ou se taise à jamais.

utiliser gedit et sa fonction chercher/remplacer

Capture%20d%E2%80%99%C3%A9cran%20du%202020-02-05%2013-09-14

Mais il y a longtemps que je n’ai pas de T.P à rendre :rofl:

houlaa :face_with_raised_eyebrow:.
bon bha réglé… apres de multiple erreurs qui ont fait que même avec la bonne utilisation de variable ça marchait pas de toute façon… c’est bien un rhume de cerveau…apparement…