IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes GNU Discussion :

echo -e ne fonctionne pas


Sujet :

Shell et commandes GNU

  1. #1
    Membre éprouvé
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    Octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 45
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Par défaut echo -e ne fonctionne pas
    Bonjour à tous,

    Voici mon script complet :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    #!/bin/bash
    # @(#) tripersonnes
     
     
    <<COMMENT1
    On dispose d’un fichier personnes dont chaque ligne est constituée du prénom et du
    genre (m pour masculin, f pour féminin) d’un individu.
     
    Ex : $ cat personnes
    arthur m
    pierre m
    dominique f
    paule f
    sylvie f
    jean m
    $
     
    Ecrire un programme shell tripersonnes qui crée à partir de ce fichier, un fichier
    garcons contenant uniquement les prénoms des garçons et un fichier filles contenant
    les prénoms des filles.
    COMMENT1
     
     
     
    if test -f "./filles.txt"
    then
    	rm filles.txt
    	touch filles.txt
    fi
    if test -f "./garcons.txt"
    then
    	rm garcons.txt
    	touch garcons.txt
    fi
     
    while read nom sexe
    do
    	case $sexe in
    	f ) echo -e "$nom\n" >> filles.txt ;;
    	m ) echo -e "$nom\n"  >> garcons.txt ;;
    	esac
    done < personnes.txt
    référence : Introduction à la programmation en Bash d'Eric Sanchis


    Pour la commande
    Cela fonctionne très bien directement dans le shell, mais dans ce programme écrit dans un fichier, ça ne fonctionne plus. Tous mes noms se retrouvent collés sans espace dans les fichiers de sortie filles.txt et garcons.txt ).

    Pourriez-vous m'aider ?

    D'avance merci.

  2. #2
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 408
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 408
    Par défaut
    Bonjour,

    N'est-ce pas plutôt l'éditeur de texte utilisé pour regarder les fichiers résultats qui serait en cause ?
    Par exemple, notepad n’interprétera pas les simples "\n", pour lui se sera plutôt "\r\n".

  3. #3
    Membre éprouvé
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    Octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 45
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Par défaut
    Merci pour ta réponse. J'utilise Scite et pour Perl, \n fonctionne très bien ... cela peut-il varier, sur le même éditeur, selon le langage utilisé ?
    Par acquis de conscience, je vais tester sur un autre éditeur.

  4. #4
    Membre éprouvé
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    Octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 45
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Par défaut
    Alors, j'ai essayé avec NotePad, la sortie est identique. J'utilise Cygwin.
    Précision : j'ai parametré Scite afin que les terminateurs de lignes soient LF et tous mes autres scripts fonctionnent très bien.

  5. #5
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 716
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 716
    Par défaut
    Bonjour,

    pour vérifier le formatage des fichiers, fais-en un cat avant la fin de ton script.

    l'écriture d'une sortie formatée devrait séparer les données du format.
    pour cela, on préfère utiliser printf :utilise une boucle pour "factoriser" tes tests d'existence de fichiers.

    plutôt que d'écrire pour chaque cas, définis le fichier de destination, puis écris.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    case genre in m) out=gars;; f) out=filles;; esac; printf '%s\n\n' "$nom" >>"$out"
    y a pas des outils pour éditer des fichiers dans cygwin, genre nano, vim... ?

  6. #6
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 408
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 408
    Par défaut
    En plus des conseils de N_BaH, comme je le disais dans mon précédent post, notepad n'est pas fait pour lire ce genre de fichier, il lui faut "\r\n".

    Après je mets en doute ton éditeur car tu dis que tous les noms dans les fichiers ne sont pas à la ligne et sont collés les uns derrière les autres.

    Est-ce vraiment le cas ou bien sont-ils, en fait, séparés par le caractère "n", ce qui serait le cas si echo -e n'interprétait pas le "\n" correctement ?

  7. #7
    Expert confirmé
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    11 204
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 204
    Par défaut
    Salut,

    fonctionne très bien chez moi (linux pur, visualisation avec leafpad en graphique ou cat dans une console) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    # cat filles.txt 
    dominique
     
    paule
     
    sylvie
     
    #

  8. #8
    Membre éprouvé
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    Octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 45
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    #!/bin/bash
    # @(#) tripersonnes
     
    if test -f "./filles.txt"
    then
    	rm filles.txt
    	touch filles.txt
    fi
    if test -f "./gars.txt"
    then
    	rm gars.txt
    	touch gars.txt
    fi
     
     
    while read nom sexe
    do
    	case $sexe in
    		m) out=gars.txt;; 
    		f) out=filles.txt;; 
    	esac; 
     
    	printf '%s\n\n' "$nom" >>"$out"
     
    done < personnes.txt
     
    cat filles.txt
    Merci à vous tous. C'était NotePad le problème et dans tous les cas, il ignore les sauts de lignes. Les \n sont pourtant les mêmes sous Windows et Linux, non ? Si j'ouvre avec Wordpad, le formatage est correct. C'est vraiment, comment perdre du temps pour une connerie, comme c'est parfois le cas en info. Mais, cela m'a permis d'apprendre plusieurs choses, et c'est mon but, donc encore merci.

    Je n'ai pas compris pourquoi créer $out, quel en est l'avantage.

    Oui, j'ai installé vi, mais ça semble compliqué à utiliser et je me demande si c'est vraiment nécessaire pour le peu d'utilisation que je vais en avoir.

    Cette ligne "# @(#) tripersonnes" ... est-ce simplement un commentaire indiquant le titre, où a-t'elle une autre utilité ?

  9. #9
    Membre éprouvé
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    Octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 45
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Par défaut
    Citation Envoyé par disedorgue Voir le message
    notepad n'est pas fait pour lire ce genre de fichier, il lui faut "\r\n".
    Oui, tu as raison, c'était le problème. Alors avec quel éditeur lire mes fichiers ?

    Citation Envoyé par disedorgue Voir le message
    Après je mets en doute ton éditeur car tu dis que tous les noms dans les fichiers ne sont pas à la ligne et sont collés les uns derrière les autres.
    Non, je pense que Scite fonctionne très bien.

    Citation Envoyé par disedorgue Voir le message
    Est-ce vraiment le cas ou bien sont-ils, en fait, séparés par le caractère "n", ce qui serait le cas si echo -e n'interprétait pas le "\n" correctement ?
    Si, j'ai testé mon script d'origine, echo -e interprête très bien le \n. Si j'ouvre le fichier 'filles.txt', avec Scite, je peux affichier les fins de lignes qui sont LF

  10. #10
    Expert confirmé
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    11 204
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 204
    Par défaut
    Citation Envoyé par Jasmine80 Voir le message
    Je n'ai pas compris pourquoi créer $out, quel en est l'avantage.
    c'est ce qui permet d'accéder au fichier qui va bien en fonction du sexe détecté dans personnes.txt. C'est une variable positionnée dans le case à chaque tour de boucle.
    Oui, on aurait pu avoir deux lignes de printf dans le case, mais c'était moins esthétique

    Citation Envoyé par Jasmine80 Voir le message
    Oui, j'ai installé vi, mais ça semble compliqué à utiliser et je me demande si c'est vraiment nécessaire pour le peu d'utilisation que je vais en avoir.
    Aïe aïe aïe, le débat vi/emacs
    Moi j'utilise l'éditeur intégré à mc (mcedit, appelable sans passer par mc), un vrai bonheur car je viens de Windows et il ressemble beaucoup à Edit du DOS.

    Citation Envoyé par Jasmine80 Voir le message
    Cette ligne "# @(#) tripersonnes" ... est-ce simplement un commentaire indiquant le titre, où a-t'elle une autre utilité ?
    Je ne sais pas, mais tu peux toujours supprimer la ligne et voir si ça change quelque chose.

  11. #11
    Membre éprouvé
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    Octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 45
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Par défaut
    Citation Envoyé par Jipété Voir le message
    Je ne sais pas, mais tu peux toujours supprimer la ligne et voir si ça change quelque chose.
    Merci Jipété. Cela ne change rien, je pensais que @(#) était peut-être une variable spéciale ... ça doit être un simple commentaire avec le nom du fichier.

  12. #12
    Expert confirmé
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    11 204
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 204
    Par défaut
    Citation Envoyé par Jasmine80 Voir le message
    Merci Jipété. Cela ne change rien, je pensais que @(#) était peut-être une variable spéciale ... ça doit être un simple commentaire avec le nom du fichier.
    Mais je t'accorde que cette construction @(#) met le doute...

  13. #13
    Membre éprouvé
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    Octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 45
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Par défaut
    Et bien, je peux maintenant clore le sujet et bonne journée à tous.

  14. #14
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 871
    Billets dans le blog
    1
    Par défaut
    Bonjour

    Citation Envoyé par Jasmine80 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    if test -f "./filles.txt"
    then
    	rm filles.txt
    	touch filles.txt
    fi
    if test -f "./gars.txt"
    then
    	rm gars.txt
    	touch gars.txt
    fi
    Code bash : Sélectionner tout - Visualiser dans une fenêtre à part
    for f in filles.txt gars.txt; do >"$f"; done
    Et voilà comment convertir 10 lignes en une seule...

    Citation Envoyé par Jipété Voir le message
    Mais je t'accorde que cette construction @(#) met le doute...
    Non je ne suis pas d'accord. Il n'y a absolument aucun doute à avoir pusqu'on trouve un "#" plus en amont sur la ligne et que cette ligne n'est pas la première du script (détail important). C'est donc un commentaire sans doute possible.

    Citation Envoyé par Jasmine80 Voir le message
    Oui, j'ai installé vi, mais ça semble compliqué à utiliser
    Ce n'est qu'une impression car "vi" est très simple à utiliser pourvu qu'on garde en permanence à l'esprit sa façon de fonctionner. vi fonctionne en effet sur 2 modes principaux
    • mode "commande", dans lequel les lettres du clavier ont diverses actions ("dd" efface la ligne courante, "x" efface le caractère courant, "dw" efface le mot courant, "i" insère du texte avant le curseur, "a" insère du texte après le curseur, "o" ouvre une nouvelle ligne sous la ligne courante, "O" ouvre une nouvelle ligne au dessus de la ligne courante, etc etc etc
    • mode "insertion" où tout ce qu'on tape devient de la saisie normale éditeur

    Quand on lance "vi" on est alors placé au début en mode "commande". On entre ensuite dans le mode "insertion" chaque fois qu'on tape une commande dédiée à l'ajout de texte ("i" ou "a" ou "o" ou "O" ou d'autres que tu découvriras). Et on revient en mode "commande" en appuyant sur "esc" quand on a fini de taper son texte (permet d'ailleurs de se replacer par défaut quand on ne sait plus dans quel mode on se trouve). Ensuite donc toute la virtuosité de l'utilisateur sera de gérer au mieux ce passage d'un mode à l'autre selon ses besoins. Il y a bien entendu une foultitude de commandes différentes qui te permettent de faire de grandes choses mais tu n'es pas obligée de toutes les utiliser ni même de toutes les connaitres. Chaque utilisateur "vi" a ses propres habitudes et commandes de références.
    Ensuite un 3° mode plus spécifique "bas de page" (qu'on atteint en tapant ":" ou"/") permet de faire des actions spéciales (remplacement de texte en masse par exemple mais plus principalement ":w" ou ":wq" qui permettent respectivement d'enregistrer et d'enregistrer et quitter.

    Une fois qu'on garde tout ça en tête, "vi" ne pose plus de soucis...

    Citation Envoyé par Jasmine80 Voir le message
    et je me demande si c'est vraiment nécessaire pour le peu d'utilisation que je vais en avoir.
    Ah là effectivement personne ne peut répondre à ta place...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  15. #15
    Modérateur
    Avatar de jlliagre
    Homme Profil pro
    Ingénieur support avancé & développement
    Inscrit en
    Juin 2007
    Messages
    2 695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur support avancé & développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 695
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    Code bash : Sélectionner tout - Visualiser dans une fenêtre à part
    for f in filles.txt gars.txt; do >"$f"; done
    Et voilà comment convertir 10 lignes en une seule...
    Allez, encore un petit effort :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    : >filles.txt >gars.txt
    voire même :


    ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    Citation Envoyé par Jasmine80 Voir le message
    [CODE]Cette ligne "# @(#) tripersonnes" ... est-ce simplement un commentaire indiquant le titre, où a-t'elle une autre utilité ?
    Bien que cette ligne n'ait aucun effet sur le code lui-même, ce n'est pas seulement un commentaire et elle a bien une autre utilité.

    "@(#)" est un mot clef introduit il y a quelques dizaines d'années par le système de gestion de version de code source SCCS.

    Il est par exemple utilisé par la commande SCCS "what" :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $ sccs what script.sh
    tp.sh:
    	 tripersonnes

  16. #16
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 299
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 299
    Par défaut
    Bonjour

    Je ne suis pas d'accord avec le remplacement de 10 lignes. Le script originel a la délicatesse de ne pas peupler le répertoire avec des fichiers inutiles. Alors que les autres alternatives comme la boucle, si. Il n'y a pas d'équivalence.

    Et quit à faire court, je propose une solution mono-ligne à la question initiale:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    awk 'BEGIN{a["f"]="filles.txt";a["m"]="garcons.txt"} {print >a[$2];}' personnes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    $ cat personnes 
    arthur m
    pierre m
    dominique f
    paule f
    sylvie f
    jean m
    $ awk 'BEGIN{a["f"]="filles.txt";a["m"]="garcons.txt"} {print >a[$2];}' personnes                                                                                                             
    $ cat filles.txt 
    dominique f
    paule f
    sylvie f
    $ cat garcons.txt 
    arthur m
    pierre m
    jean m

  17. #17
    Modérateur
    Avatar de jlliagre
    Homme Profil pro
    Ingénieur support avancé & développement
    Inscrit en
    Juin 2007
    Messages
    2 695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur support avancé & développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 695
    Par défaut
    Citation Envoyé par Flodelarab Voir le message
    Je ne suis pas d'accord avec le remplacement de 10 lignes. Le script originel a la délicatesse de ne pas peupler le répertoire avec des fichiers inutiles. Alors que les autres alternatives comme la boucle, si. Il n'y a pas d'équivalence.
    "rm" suivi de "touch" est quand même un peu laborieux.

    Voici une version qui ne crée pas de fichier:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for f in filles.txt gars.txt; do [ -f $f ] && > $f ; done
    Le plus simple serait probablement:

    car je ne vois pas l'utilité de créer des fichiers vides, l'absence de fichier procurant la même information.

  18. #18
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 408
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 408
    Par défaut
    Pour en rajouter une couche, un rm + un touch (ou redirection) n'est pas équivalent à une simple redirection pour vider un fichier.

    Dans le cas de la simple redirection pour vider le fichier, on ne touche pas aux propriétés du fichier et on ne rend pas "obsolète" les FD des process en cours qui ont ouvert le dit fichier contrairement à la solution rm + touch.

    C'est, en mon sens, à prendre en considération dans le choix de la solution.

  19. #19
    Membre Expert
    Avatar de Escapetiger
    Homme Profil pro
    Administrateur système Unix - Linux
    Inscrit en
    Juillet 2012
    Messages
    1 581
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Administrateur système Unix - Linux

    Informations forums :
    Inscription : Juillet 2012
    Messages : 1 581
    Par défaut
    Citation Envoyé par disedorgue Voir le message
    (...)
    Dans le cas de la simple redirection pour vider le fichier, on ne touche pas aux propriétés du fichier et on ne rend pas "obsolète" les FD des process en cours qui ont ouvert le dit fichier contrairement à la solution rm + touch.
    (...)
    Je me permets pour nos lecteurs ...

    FD : File Descriptor

    et issu du lien wikipedia :

    lsof list open files
    https://en.wikipedia.org/wiki/Lsof

    fuser The Unix command fuser is used to show which processes are using a specified file, file system, or unix socket
    https://en.wikipedia.org/wiki/Fuser_%28Unix%29

    Nota: pour la majorité des distributions Linux normalement aussi
    « Developpez.com est un groupe international de bénévoles dont la motivation est l'entraide au sens large » (incl. forums developpez.net)
    Club des professionnels en informatique

    Liste des balises BB

  20. #20
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 871
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Flodelarab Voir le message
    Je ne suis pas d'accord avec le remplacement de 10 lignes. Le script originel a la délicatesse de ne pas peupler le répertoire avec des fichiers inutiles. Alors que les autres alternatives comme la boucle, si. Il n'y a pas d'équivalence.
    Ah ? Pas de fichier inutile ??? Et que se passe-t-il s'il existe un ancien fichier "garcons.txt" et que par la suite le script ne traite que des filles ? Le script commencera par effacer "garcons.txt" pour le recréer vide et tu te retrouveras en final avec un fichier "garcons.txt" vide et inutile...
    Alors certes on peut reprocher la boucle (destinée en général à faciliter une évolutivité future peu probable vu que le nombre de genres ne risque pas d'augmenter) mais ne me dis pas qu'il était délicat d'écrire "si un ancien fichier existe je l'efface pour le recréer sans savoir s'il sera vraiment nécessaire". Ou alors tu considères qu'il y aura probablement toujours des garçons et des filles et donc qu'il y aura fatalement les deux fichiers nécessaires et donc tu admettras fatalement que cette boucle devient une équivalence à reconsidérer.

    Donc si vraiment tu cherches la délicatesse (perso j'aurais plutôt parlé d'optimisation) alors on efface tout avec un simple rm -f en laissant la suite du script recréer les fichiers juste nécessaires. On pourra alors discuter de s'il vaut mieux appeler "rm" (peut-être inutilement) en le laissant lui-même ne rien faire quand il n'y a rien à effacer ou bien s'il vaut mieux (comme c'était écrit) tester avant de l'appeler.
    Et si vraiment on veut chercher la petite bête alors avant de parler de fd déjà en cours d'utilisation (où je doute fortement que ce cas arrive un jour ici) on peut plus simplement s'interroger sur le cas où les fichiers existent mais ne sont pas des fichiers réguliers car dans ce cas le script originel, bien qu'ayant toute la délicatesse dont tu peux rêver, part quand-même au crash...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Batch] echo et pause ne fonctionne pas dans mon batch
    Par pol2095 dans le forum Scripts/Batch
    Réponses: 5
    Dernier message: 09/07/2013, 18h58
  2. [Batch] @echo off ne fonctionne pas
    Par makiavel7 dans le forum Scripts/Batch
    Réponses: 1
    Dernier message: 12/02/2013, 10h42
  3. [PowerShell] Commande ECHO ne fonctionne pas en tâche planifiée
    Par RedFish64 dans le forum Scripts/Batch
    Réponses: 4
    Dernier message: 30/11/2012, 17h54
  4. Javascript dans un echo PHP de fonctionne pas
    Par Ed la poignee dans le forum Langage
    Réponses: 1
    Dernier message: 24/03/2009, 17h31
  5. ca ne fonctionne pas (generateur auto-incrémentant)
    Par tripper.dim dans le forum SQL
    Réponses: 7
    Dernier message: 26/11/2002, 01h10

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo