Forum debian-fr.org

Rechercher:

* Connexion   * M’enregistrer

* FAQ    * Rechercher





Poster un nouveau sujet Répondre au sujet  [ 10 messages ] 
Auteur Message
MessagePosté: 02 Juin 2012 16:07 
Hors ligne
Très bavard(e)!
Avatar de l’utilisateur

Inscription: 18 Juil 2007 13:25
Messages: 415
Localisation: Aisne
Bonjour,
Avec le code suivant,
Code:
mount | egrep '/mnt/S_racine/lv_var' && echo 'Déja montée' ||\
    sudo mount -t xfs /dev/mapper/groupe_unique-lv_var /mnt/S_racine/lv_var &&\
    echo " montée " || exit 5


J'espérai avoir le comportement suivant:
1 savoir si la partition est bien monté ( c'est OK )
2 si c'est le cas afficher 'Déja monté' ( c'est OK )
sinon la monter ( c'est OK )
et alors seulement afficher 'montée' ( et la ça affiche même si c'était déjà monté )
3 Enfin sortir du script si ce montage a échoué ( erreur pas encore testée, mais sans problème: ça ne sort pas )

On voit que le "&&" après un "||" garde la vérité de la 1ère commande si le "||" est faux (donc inutile)
J'aimerai donc regrouper les conditions, un peu comme ceci:

commande1 && echo OK || ( commande2 && echo OK || ( echo message ; exit ) )

Malheureusement, je crois que le regroupement des commandes entre parenthèses lance un sous-shell , et dans ce cas "exit" ne fait que sortir du sous-shell.( et même, ici du 2e sous-shell )

La question: existe-t-il un moyen de faire des regoupements de commandes dans la même instance (le même processus) du shell ?

Merci à tous

_________________
Précédent: Carte K7S5A AMD 1200 MHz Lenny 2.6.26-2-686.

Actuel: Carte EVGA Classified SR-2, 2 x "Intel Xeon CPU X5672 3.20GHz",
8 x "2GiB DIMM 1333 MHz", 4 ddurs "1TB SAMSUNG HD103SJ"
Squeeze 2.6.32-5-amd64.


Haut
 Profil  
 
MessagePosté: 02 Juin 2012 16:23 
Hors ligne
Très bavard(e)!
Avatar de l’utilisateur

Inscription: 18 Juil 2007 13:25
Messages: 415
Localisation: Aisne
Réponse: ?
remplacer les parenthèses de mon exemple par des accolades { } ( comme en Perl )
Code:
mount | egrep '/mnt/S_racine/S_boot' && echo 'Déja montée' ||\
    ( sudo mount -t ext4 -U 743abb88-2fe8-4dbe-891c-adcc16708a52 /mnt/S_racine/S_boot &&\
    echo " montée ") || { echo '/mnt/S_racine/S_boot N'A PAS PU ÊTRE MONTÉ ; exit 2 }

ne marche pas:
La commande n'est pas finie:
en ligne de commande, on obtient une invite (un prompt):
>
et en script, un message "fin de fichier inattendue ligne "(dernière)

Je sèche; je vais donc, soit renoncer à blinder mon script, soit devoir utiliser les tests avec if.. que je voulais éviter.

_________________
Précédent: Carte K7S5A AMD 1200 MHz Lenny 2.6.26-2-686.

Actuel: Carte EVGA Classified SR-2, 2 x "Intel Xeon CPU X5672 3.20GHz",
8 x "2GiB DIMM 1333 MHz", 4 ddurs "1TB SAMSUNG HD103SJ"
Squeeze 2.6.32-5-amd64.


Haut
 Profil  
 
MessagePosté: 03 Juin 2012 09:22 
Hors ligne
Contributeur
Avatar de l’utilisateur

Inscription: 18 Juil 2007 17:57
Messages: 7737
Localisation: Grenoble
Les parenthèses n'ouvrent pas de nouveaux shell sauf précédé de $. Tu devrais pouvoir utiliser les parenthèses peut être échappés par \.
Mais je suis d'avis que tu devrais l'écrire sous forme if else.

_________________
Je suis Pitta, cartésien, irritable, irritant et névrosé (de plus je fais de l'entrisme pour zsh), si l'un de mes messages vous insupporte essayez d'y voir de l'ironie ou de ne pas en tenir compte. Bonne journée et gardez le sourire. :)


Haut
 Profil  
 
MessagePosté: 03 Juin 2012 14:33 
Hors ligne
Très bavard(e)!
Avatar de l’utilisateur

Inscription: 18 Juil 2007 13:25
Messages: 415
Localisation: Aisne
Merci MisterFreez pour cette précision et effectivement, les lignes de la forme:
Code:
mount | egrep '/mnt/S_racine type' && echo 'Déja montée' ||\
( sudo mount -t ext4 -U 543f1c11-3878-4a9f-995f-19f84166803a /mnt/SC_racine &&\
echo " montée " ) || exit 1

fonctionnent:
exit 1 agit si la commande mount renvoie une erreur et
echo " montée " dans le cas contraire

_________________
Précédent: Carte K7S5A AMD 1200 MHz Lenny 2.6.26-2-686.

Actuel: Carte EVGA Classified SR-2, 2 x "Intel Xeon CPU X5672 3.20GHz",
8 x "2GiB DIMM 1333 MHz", 4 ddurs "1TB SAMSUNG HD103SJ"
Squeeze 2.6.32-5-amd64.


Haut
 Profil  
 
MessagePosté: 03 Juin 2012 15:02 
Hors ligne
Modérateur du forum
Avatar de l’utilisateur

Inscription: 18 Mai 2009 16:49
Messages: 4049
MisterFreez a écrit:
Les parenthèses n'ouvrent pas de nouveaux shell sauf précédé de $.

C'est faux : http://tldp.org/LDP/abs/html/subshells.html
Les parenthèses (avec ou sans $ devant, peu importe) ouvrent toujours un nouveau shell, les accolades jamais.
Facilement vérifiable en comptant le nombre de process bash (ps aux | grep -c bash) pendant l'exécution des deux commandes suivantes :
1) while true; do sleep 1; done
2) (while true; do sleep 1; done)

_________________
testing/unstable (amd64) sous KDE4
github/syam44 - De la bonne manière de poser les questions - Wiki debian-fr
Just because you're paranoid doesn't mean they aren't after you. -- J.Heller


Haut
 Profil  
 
MessagePosté: 03 Juin 2012 18:59 
Hors ligne
Contributeur
Avatar de l’utilisateur

Inscription: 18 Juil 2007 17:57
Messages: 7737
Localisation: Grenoble
Je suis surpris. Je testerais peut être ce soir.

_________________
Je suis Pitta, cartésien, irritable, irritant et névrosé (de plus je fais de l'entrisme pour zsh), si l'un de mes messages vous insupporte essayez d'y voir de l'ironie ou de ne pas en tenir compte. Bonne journée et gardez le sourire. :)


Haut
 Profil  
 
MessagePosté: 04 Juin 2012 05:13 
Hors ligne
Nouvel utilisateur

Inscription: 14 Juil 2011 00:00
Messages: 28
Citation:
exit 1 agit si la commande mount renvoie une erreur
non, exit 1 est exécuté si grep ne retourne pas d'erreur.

man bash / Pipelines:
Citation:
The return status of a pipeline is the exit status of the last command,[...]


Edit:
ah ouais, non. J'ai lu trop rapidement, mais un peu de clarté ne nuirait pas
Code:
if mount | egrep '/mnt/S_racine type'; then echo 'Déja montée'; else sudo mount -t ext4 -U 543f1c11-3878-4a9f-995f-19f84166803a /mnt/SC_racine && echo " montée " || exit 1; fi


Haut
 Profil  
 
MessagePosté: 18 Juin 2012 22:31 
Hors ligne
Très bavard(e)!
Avatar de l’utilisateur

Inscription: 18 Juil 2007 13:25
Messages: 415
Localisation: Aisne
L'intérêt de l'exercice était justement de se passer de if .

( je n'ai rien a priori contre if ! -mais en y réfléchissant, la ligne de commande sans if gagne en concision ce qu'elle perd peut-être en clarté quoique..- )


Haut
 Profil  
 
MessagePosté: 18 Juin 2012 23:31 
Hors ligne
Contributeur
Avatar de l’utilisateur

Inscription: 18 Juil 2007 17:57
Messages: 7737
Localisation: Grenoble
Elle ne perd en clarté que si on fait de l'uniligne :

Code:
if mount | egrep -q '/mnt/S_racine type'; then
    echo 'Déja montée';
else
    if sudo mount -t ext4 -U 543f1c11-3878-4a9f-995f-19f84166803a /mnt/SC_racine ; then
        exit 1
    else
       echo " montée "
    fi
fi


L'uniligne et le golfe ne servent que pour des tâches quotidiennes et encore une fonction le faire très bien.

_________________
Je suis Pitta, cartésien, irritable, irritant et névrosé (de plus je fais de l'entrisme pour zsh), si l'un de mes messages vous insupporte essayez d'y voir de l'ironie ou de ne pas en tenir compte. Bonne journée et gardez le sourire. :)


Haut
 Profil  
 
MessagePosté: 11 Juil 2012 21:58 
Hors ligne
Très bavard(e)!
Avatar de l’utilisateur

Inscription: 18 Juil 2007 13:25
Messages: 415
Localisation: Aisne
Oui MisterFreeze, mais pouvoir faire de l'uniligne est une façon d'être rapide et efficace sans avoir à écrire un script, d'ou l'intéret de s'exercer et d'enrichir sa trousse à outil d'urgence ;)

Bien sur, un script permet, entre autre, d'être plus lisible

je persiste : je n'ai rien contre if :P


Haut
 Profil  
 
Afficher les messages postés depuis:  Trier par  
Poster un nouveau sujet Répondre au sujet  [ 10 messages ] 

Index du forum » Divers » Programmation


Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités


Vous ne pouvez pas poster de nouveaux sujets
Vous ne pouvez pas répondre aux sujets
Vous ne pouvez pas éditer vos messages
Vous ne pouvez pas supprimer vos messages
Vous ne pouvez pas joindre des fichiers

Aller à:  
Flux RSS Flux RSS Liste des flux Liste des flux
Powered by phpBB® Forum Software © phpBB Group
Traduction par: phpBB-fr.com
SEO
[ Time : 0.073s | 14 Queries | GZIP : Off ]