#1 Le 06/11/2008, à 12:54
- LEIôPAR
[résolu] récupérer résultat d'un smbmount en variable en bash
Bonjour
Après moult recherche sur la toile je ne trouve pas de solution qui marche pour récupérer résultat d'un smbmount dans une variable en bash.
Actuellement mon script ressemble à ca (j'ai simplifié sur le problème) :
message=$(smbmount //serveur/sauv /mnt/sauv/ -o username=toto,password=pass)
echo le message est : $message
mais quant il y a un problème, la sortie resemble a ca :
Could not resolve mount point /mnt/sauv/
le message est :
au lieu de :
le message est : Could not resolve mount point /mnt/sauv/
quelqu'un a une solution ?
Dernière modification par LEIôPAR (Le 06/11/2008, à 17:04)
Que tes principes moraux ne t'empêchent jamais de faire ce qui est juste !
(Isaac Asimov/Fondation/Salvor Hardin)
Hors ligne
#2 Le 06/11/2008, à 14:04
- alexduf
Re : [résolu] récupérer résultat d'un smbmount en variable en bash
Bonjour,
en fait sur une commande tu as généralement deux sorties, la sortie standard et la sortie en erreur.
Quand tu utilises $() c'est la sortie standard qui est utilisée.
Une des solutions serait donc de rediriger la sortie en erreur vers la sortie standard.
Donc quelque chose comme ça :
message=$(smbmount //serveur/sauv /mnt/sauv/ -o username=toto,password=pass 2>&1)
echo le message est : $message
A vérifier évidemment.
Je te conseille aussi de vérifier le code retour de ta commande, cela te permettra de savoir si elle s'est bien déroulée.
Hors ligne
#3 Le 06/11/2008, à 17:03
- LEIôPAR
Re : [résolu] récupérer résultat d'un smbmount en variable en bash
Impec !
je ne comprend pas très bien ce que signifi le " 2>&1" qu'il me manquait mais bon... ca marche !
Merci
Que tes principes moraux ne t'empêchent jamais de faire ce qui est juste !
(Isaac Asimov/Fondation/Salvor Hardin)
Hors ligne
#4 Le 06/11/2008, à 17:53
- alexduf
Re : [résolu] récupérer résultat d'un smbmount en variable en bash
en fait quand on redirige la sortie d'une commande on effectue ceci
ls > liste.txt
Ceci va te lister les fichiers d'un répertoire et te les enregistrer dans un fichier.
En fait cela revient au même que
ls 1> liste.txt
En effet la sortie n°1 est la sortie standard
si tu fais
ls 2> liste.txt
tu n'auras rien dans liste.txt, sauf si la commande ls retourne une erreur (droits d'accès, ou autre)
Il y a donc deux sorties sur une commande, la n°1 (standard) et la n°2 (erreur). On peut même en rajouter, même si je n'ai jamais trop compris comment ça fonctionnait.
On peut aussi s'amuser à faire des redirections, genre
echo Erreur 1>&2
qui va afficher echo dans la sortie d'erreur ou
echo Toto 2>&1
qui placera les erreurs de la commande dans la sortie standard
Hors ligne
#5 Le 07/11/2008, à 14:41
- LEIôPAR
Re : [résolu] récupérer résultat d'un smbmount en variable en bash
Merci pour ces explications.
Moi qui me suis longtemps cassé la tête avec des "dos.bat", les possibilité du shell bash me laissent rêveur !
Le but de la manœuvre était de m'envoyer par mail les message d'erreur pour ma synchronisation automatique... et sous Linux je fait tout ça juste avec un simple fichier bash !
mon serveur web se sauvegarde automatiquement sur un NAS(qui tourne avec un Linux embarqué ).
Je passe par un client SAMBA... ben...parce qu'a l'origine, la sauvegarde se fessait sur un serveur windows et par souci d'homogénéité avec le reste du réseau de mon entreprise... on peu sans doute faire mieux... mais ça marche.
Je vous livre mon code finale, si ça peu servir à quelqu'un :
tout d'abords, le fichier sauv.sh :
#!/bin/bash
# sauvegarde vers le NAS
# montage du NAS
message=$(smbmount //serveur/sauv /mnt/sauv/ -o username=toto,password=pass 2>&1)
# teste si un répertoire précis et présent sur le NAS existe dans le système de fichiers
# (s'il n'est pas là, c'est que le montage n'a pas fonctionné)
if [ -d "/mnt/sauv/base/" ]; then
# synchronisation proprement dite
# (l'option "--modify-window=1" n'est utile que pour une cible windows)
rsync -rt --modify-window=1 /var/www/charette/base/ /mnt/sauv/
# démontage
smbumount /mnt/sauv/
else
# envoi d'un courriel en cas de problème avec le message de "smbmount"
(
echo To: admin@toto.fr
echo From: web@toto.fr
echo Subject: erreur connextion NAS pour sauvegarde WEB
echo $message
) | /usr/sbin/sendmail -t -i -fadmin@hah-be.fr web@toto.fr
fi
Petite modification du cron (commande "crontab -e") :
# m h dom mon dow command
0 23 * * * sh /root/sauv.sh
voili voulou
Encore merci à Alexduf
Dernière modification par LEIôPAR (Le 07/11/2008, à 14:43)
Que tes principes moraux ne t'empêchent jamais de faire ce qui est juste !
(Isaac Asimov/Fondation/Salvor Hardin)
Hors ligne