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 :

Problème d'incompatibilité dans un script avec read, IFS et rsync


Sujet :

Shell et commandes GNU

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

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 730
    Points : 15 132
    Points
    15 132
    Par défaut Problème d'incompatibilité dans un script avec read, IFS et rsync
    Bonjour,

    dans un script j'ai besoin de lire un fichier et j'utilise donc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    cat "$fichier_ini" | while read ligne
    do
    	instructions...
    done
    qui fonctionne très bien sauf que le "read" de la première ligne m'interdit de rajouter des read -r x temporaires par ci par là dans le script, pour examiner des trucs et des machins par exemple ; le script ne s'y arrête plus

    Qu'à cela ne tienne, je vais donc lire mon fichier avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    old_IFS=$IFS
    IFS=$'\n'
    for ligne in $(cat "$fichier_ini")
    do
    	instructions...
    done
    IFS=$old_IFS
    et je récupère la possibilité de mettre mes "read" temporaires.

    Le drame maintenant, c'est que ma commande rsync plus loin ne fonctionne plus... Elle est appelée comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    rsync_cmd='rsync -vrlpEogthq --delete'
    $rsync_cmd "$src" "$dst"
    et je gagne
    rsync -vrlpEogthq --delete : commande introuvable
    .
    Il me suffit de rebasculer la lecture du fichier en mode while read pour retrouver un rsync fonctionnel, mais je perds mes "pauses" dans le script

    Une idée pour avoir le beurre et l'argent du beurre ?

    Merci par avance
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 552
    Points : 19 389
    Points
    19 389
    Par défaut
    ah, mes yeux !!!
    uuoc
    parcours d'une substitution de commandes avec un boucle for.


    Bonjour,

    tu veux utiliser read dans la boucle while read, c'est ça ?
    avec un descripteur de fichier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    while read line <&3
    do
       read -p 'saisie intermédiaire : ' intermed
       echo "$line"
    done 3<fichier
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

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

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 730
    Points : 15 132
    Points
    15 132
    Par défaut
    Citation Envoyé par N_BaH Voir le message
    ah, mes yeux !!!
    uuoc
    parcours d'une substitution de commandes avec un boucle for.
    On en trouve plein le web, de ce genre de construction...


    Citation Envoyé par N_BaH Voir le message
    tu veux utiliser read dans la boucle while read, c'est ça ?
    En fait beaucoup plus loin, dans une sous-fonction d'une sous-fonction que j'ai simplement résumée par ma ligne instructions...
    Mais je n'ai mis que le principal pour ne pas alourdir le post.

    Citation Envoyé par N_BaH Voir le message
    avec un descripteur de fichier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    while read line <&3
    do
       read -p 'saisie intermédiaire : ' intermed
       echo "$line"
    done 3<fichier
    + 1 !
    Pas mal ! Je n'aurais pas su l'inventer, un truc tarabiscoté comme ça !

    Grand merci à toi et très bonne soirée, me voilà débloqué, ouf !
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 552
    Points : 19 389
    Points
    19 389
    Par défaut
    On en trouve plein le web, de ce genre de construction...
    des noms ! des adresses ! que j'aile leur casser la g

    on peut essayer de pécher avec un fusil, mais ça pose plus de problèmes que ça n'apporte de solution.
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

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

Discussions similaires

  1. Problème d'espaces dans les chemins avec Cygwin
    Par destructive dans le forum Applications et environnements graphiques
    Réponses: 1
    Dernier message: 14/04/2008, 17h48
  2. Réponses: 7
    Dernier message: 25/06/2007, 22h34
  3. Réponses: 2
    Dernier message: 23/06/2007, 14h54
  4. Problème de requête dans une boucle avec ADOQuery
    Par Ekik dans le forum Bases de données
    Réponses: 8
    Dernier message: 14/05/2007, 16h07
  5. [MySQL] Problème de pagination dans un script.
    Par Scurz dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 13/08/2006, 12h47

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