Forum Programmation.shell Tiens, là je vois pas...

Posté par  (site web personnel) . Licence CC By‑SA.
Étiquettes : aucune
3
29
avr.
2013
#!/bin/bash
while read a 
do
        echo $a
        ssh rsync@kevin mkdir /tmp/plop
done <  /tmp/rsync_perso

Ce petite bout de code (pour l'exemple) me pose problème…

Meme si mon fichier /tmp/rsync_perso contient plusieurs lignes, le résultat sera le suivant:

[gnumdk@arch ~]$ bash p.sh 
Perso/plop/

Si je remplace la commande ssh par n'importe quoi d'autre, alors il boucle sur l'ensemble du fichier…

Une idée ?

  • # Commentaire supprimé

    Posté par  . Évalué à 4.

    Ce commentaire a été supprimé par l’équipe de modération.

    • [^] # Commentaire supprimé

      Posté par  . Évalué à 6.

      Ce commentaire a été supprimé par l’équipe de modération.

      • [^] # Re: ssh lit le stdin

        Posté par  . Évalué à -5.

        cat file | while read line;
        do
        echo $line
        done

        fonctionne aussi.

        • [^] # Commentaire supprimé

          Posté par  . Évalué à 1.

          Ce commentaire a été supprimé par l’équipe de modération.

          • [^] # Re: ssh lit le stdin

            Posté par  . Évalué à -2.

            je croyais que ton problème était de lire une ligne entière …

            Si ton soucis c'est que ta boucle sort à la première ligne, utilise ssh -n (man ssh). Et ta boucle ne calera plus à la première ligne.

            Sylvain

            • [^] # Commentaire supprimé

              Posté par  . Évalué à 2.

              Ce commentaire a été supprimé par l’équipe de modération.

              • [^] # Re: ssh lit le stdin

                Posté par  . Évalué à 4. Dernière modification le 29 avril 2013 à 16:04.

                Je te propose de créer un sous-shell avec stdin en entrée pour proteger toute la partie dont tu veux qu'elle ne touche pas à stdin :

                while read a 
                do
                    echo "bonjour"
                
                    # partie protégée
                    (
                        echo $a
                        ssh localhost true
                    ) < /dev/null
                
                    echo "au revoir"
                
                done <  /tmp/rsync_perso
                
                
      • [^] # Re: ssh lit le stdin

        Posté par  . Évalué à 1.

        Pas chez moi, ça n'arrête pas de lire la première ligne du fichier en boucle.

        • [^] # Commentaire supprimé

          Posté par  . Évalué à 1. Dernière modification le 30 avril 2013 à 15:36.

          Ce commentaire a été supprimé par l’équipe de modération.

  • # Merci les gens

    Posté par  (site web personnel) . Évalué à 0.

    J'ai appris un truc…

    Bon, j'ai pas eu de connexion de la journée, on verra ça demain :-) MERCI RENATER!

  • # read -u fd

    Posté par  . Évalué à 5.

    En utilisant un descripteur de fichier :

    exec 3</tmp/fic
    while read -u 3 line
    do
        echo $line
        ssh user@host hostname
    done
    exec 3<&-
    
    

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.