Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 06/11/2008, à 12:54

LEIôPAR

[résolu] récupérer résultat d'un smbmount en variable en bash

Bonjour smile

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. sad

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 ? neutral

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 ! big_smile

je ne comprend pas très bien ce que signifi le " 2>&1" qu'il me manquait mais bon... ca marche !

Merci smile


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. smile

Moi qui me suis longtemps cassé la tête avec des "dos.bat", les possibilité du shell bash me laissent rêveur ! roll

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é wink ).
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 big_smile

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