|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||||
![]() ![]() Bernard SIAUDEnseignant Inscription : novembre 2003 Messages : 4 400 ![]() |
Bonjour
Je ne vois pas pourquoi le passage dans ma boucle grep "/media/" /etc/mtab | grep -v floppy | grep -v cdrom | while read LINE ; do ne modifie pas les valeurs de mes paramètres ! Ou plutôt, pourquoi les modifications de mes paramètres ne sont pas retenues. On voit bien qu'ils sont affectés, mais en fin de boucle on retrouve les valeurs d'avant ! Code :
Code :
__________________
Modérateur Mandriva Linux Amicalement VOOotre Troumad Alias Bernard SIAUD à découvrir sur http://troumad.org Mes tutoriels |
||||
|
|
00
|
|
|
#2 |
|
Membre Expert
![]() Inscription : mars 2002 Messages : 946 ![]() |
Parce que le pipe crée un nouveau processus (par fork). C'est donc un processus fils qui exécute la boucle while. Les variables modifiées ne sont donc pas reportées au père.
Tu peux faire un mkfifo, rediriger la sortie dans le tube nommé et lire les infos dans le processus père. Je ne sais pas s'il y a plus simple. |
|
|
00
|
|
|
#3 |
![]() ![]() Bernard SIAUDEnseignant Inscription : novembre 2003 Messages : 4 400 ![]() |
man mkfifo est très peu parlant ! J'aurais besoin d'un exemple pour comprendre.
__________________
Modérateur Mandriva Linux Amicalement VOOotre Troumad Alias Bernard SIAUD à découvrir sur http://troumad.org Mes tutoriels |
|
|
00
|
|
|
#4 | ||
|
Membre expérimenté
![]() Inscription : mars 2007 Messages : 469 ![]() |
Ça doit le faire
Code :
__________________
Loi de Murphy: La Théorie c'est quand ça ne marche pas mais que l'on sait pourquoi. La Pratique c'est quand ça marche mais qu'on ne sait pas pourquoi. Quand la théorie rejoint la pratique ça ne marche pas et on ne sait pas pourquoi. |
||
|
|
00
|
|
|
#5 |
![]() ![]() Bernard SIAUDEnseignant Inscription : novembre 2003 Messages : 4 400 ![]() |
Ça marche !
Il me reste à comprendre...
__________________
Modérateur Mandriva Linux Amicalement VOOotre Troumad Alias Bernard SIAUD à découvrir sur http://troumad.org Mes tutoriels |
|
|
00
|
|
|
#6 | ||
![]() ![]() Bernard SIAUDEnseignant Inscription : novembre 2003 Messages : 4 400 ![]() |
À tester :
Code :
__________________
Modérateur Mandriva Linux Amicalement VOOotre Troumad Alias Bernard SIAUD à découvrir sur http://troumad.org Mes tutoriels |
||
|
|
00
|
|
|
#7 |
|
Membre Expert
![]() Inscription : mars 2002 Messages : 946 ![]() |
Oui, pas mal. La notation <( ) crée un file descriptor temporaire.
C'est donc la même logique qu'avec mkfifo, c'est plus joli, mais moins portable (ce n'est pas posix). |
|
|
00
|
|
|
#8 | ||
|
Membre expérimenté
![]() Inscription : mars 2007 Messages : 469 ![]() |
Autre solution
Code :
__________________
Loi de Murphy: La Théorie c'est quand ça ne marche pas mais que l'on sait pourquoi. La Pratique c'est quand ça marche mais qu'on ne sait pas pourquoi. Quand la théorie rejoint la pratique ça ne marche pas et on ne sait pas pourquoi. |
||
|
|
00
|
|
|
#9 |
|
Membre Expert
![]() Inscription : mars 2002 Messages : 946 ![]() |
Oui, mais c'est assez différent : tout le contenu de la commande est stocké en mémoire avant d'exécuter la boucle. Sur un flux très long, c'est à déconseiller. Si l'entrée correspond au clavier, le comportement sera différent (non interactif).
Mais si la commande renvoie peu de résultats, c'est en effet une bonne alternative. |
|
|
00
|
|
|
#10 |
![]() ![]() Bernard SIAUDEnseignant Inscription : novembre 2003 Messages : 4 400 ![]() |
Je comprends mieux cette méthode qui me montre en plus comment utiliser un grep -v avec 2 mots à virer.
C'était une question que je me posait depuis longtemps ! En plus, elle doit aussi marcher pour sélectionner les lignes qui contiennent soit un mot, soit l'autre : encore mieux que prévu !
__________________
Modérateur Mandriva Linux Amicalement VOOotre Troumad Alias Bernard SIAUD à découvrir sur http://troumad.org Mes tutoriels |
|
|
00
|
|
|
#11 | |||
![]() ![]() Bernard SIAUDEnseignant Inscription : novembre 2003 Messages : 4 400 ![]() |
Je corrige :
Citation:
__________________
Modérateur Mandriva Linux Amicalement VOOotre Troumad Alias Bernard SIAUD à découvrir sur http://troumad.org Mes tutoriels |
|||
|
|
00
|
|
|
#12 |
![]() ![]() Bernard SIAUDEnseignant Inscription : novembre 2003 Messages : 4 400 ![]() |
Et bien, ça ne marche pas non plus... Ça concatène la sortie en un seul bloc... Il faudrait concaténer uniquement les lignes. Et, là, pas d'idée !
__________________
Modérateur Mandriva Linux Amicalement VOOotre Troumad Alias Bernard SIAUD à découvrir sur http://troumad.org Mes tutoriels |
|
|
00
|
|
|
#13 | ||
|
Membre Expert
![]() Inscription : mars 2002 Messages : 946 ![]() |
Code :
|
||
|
|
00
|
|
|
#14 |
![]() ![]() Bernard SIAUDEnseignant Inscription : novembre 2003 Messages : 4 400 ![]() |
C'est quoi ce :
IFS=" " Qu'est-ce qu'il fait au juste ? Un man ne dit rien !
__________________
Modérateur Mandriva Linux Amicalement VOOotre Troumad Alias Bernard SIAUD à découvrir sur http://troumad.org Mes tutoriels |
|
|
00
|
|
|
#15 |
|
Membre Expert
![]() Inscription : mars 2002 Messages : 946 ![]() |
Si, c'est expliqué dans le man (bash).
IFS = Internal Field Separator. Ca indique au shell comment découper les tokens. Par défaut, il utilise l'espace, la tabulation et le retour ligne. Ma ligne indique que le seul séparateur de mots est le retour ligne. |
|
|
00
|
|
|
#16 | ||
![]() ![]() Bernard SIAUDEnseignant Inscription : novembre 2003 Messages : 4 400 ![]() |
Très fort ! Mais après l'utilisation de cet artifice, on doit le remettre comme avant ! Et là, le man bash n'est pas très parlant :
Code :
__________________
Modérateur Mandriva Linux Amicalement VOOotre Troumad Alias Bernard SIAUD à découvrir sur http://troumad.org Mes tutoriels |
||
|
|
00
|
|
|
#17 |
|
Membre Expert
![]() Inscription : mars 2002 Messages : 946 ![]() |
En général, non.
Ton script étant exécuté dans un sous-shell, la modification de l'IFS n'est pas censée être répercutée en dehors. Si tu veux le restaurer pour la suite de ton script, c'est pas compliqué : Et le man est parlant : il te donne la valeur par défaut (espace - tabulation - retour ligne). |
|
|
00
|
|
|
#18 |
![]() ![]() Bernard SIAUDEnseignant Inscription : novembre 2003 Messages : 4 400 ![]() |
J'avais vu, mais je ne voyais pas comment générer moi même cet ancien IFS. C'est vrai qu'il suffisait de le mémoriser !
J'en aurais appris des choses ![]() Et ma correction de copies n'avance pas C'est ma femme qui va raller ! ![]() beaucoup !
__________________
Modérateur Mandriva Linux Amicalement VOOotre Troumad Alias Bernard SIAUD à découvrir sur http://troumad.org Mes tutoriels |
|
|
00
|
|
|
#19 |
|
Membre Expert
![]() Inscription : mars 2002 Messages : 946 ![]() |
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com