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

Linux Discussion :

[SHELL] Redirection vers multiples fichiers


Sujet :

Linux

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué

    Inscrit en
    Novembre 2009
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 9
    Par défaut [SHELL] Redirection vers multiples fichiers
    Bonjour à tous

    Petite question bête à laquelle je n'ai pas trouvé la réponse en recherchant rapidement, donc je me permets de la poser:

    Je souhaite ajouter une ligne à la fin de multiples fichiers, qqc du genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo "coucou" >> /users/*/.bash_profile
    Mais ça ne fonctionne pas (-bash: /users/*/.bash_profile: ambiguous redirect)

    Vous avez une idée?

    Merci!
    Nathan

  2. #2
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 840
    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 840
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par nbarraille Voir le message
    Bonjour à tous

    Petite question bête à laquelle je n'ai pas trouvé la réponse en recherchant rapidement, donc je me permets de la poser:

    Je souhaite ajouter une ligne à la fin de multiples fichiers, qqc du genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo "coucou" >> /users/*/.bash_profile
    Mais ça ne fonctionne pas (-bash: /users/*/.bash_profile: ambiguous redirect)

    Vous avez une idée?

    Merci!
    Nathan
    La redirection ne fonctionne que pour un seul fichier. En analysant l'"*", le shell trouve qu'il y a plusieurs possibilités et ne sait pas laquelle choisir => ambiguous
    Te faut donc en faire plusieurs. Ou bien utiliser un tee
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo "coucou" |tee fic1 |tee fic2 |tee fic3 >> fic4
    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]

  3. #3
    Membre expérimenté Avatar de fransoo
    Inscrit en
    Novembre 2009
    Messages
    209
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 209
    Par défaut
    Citation Envoyé par nbarraille Voir le message
    Bonjour à tous
    Je souhaite ajouter une ligne à la fin de multiples fichiers, qqc du genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo "coucou" >> /users/*/.bash_profile
    Ça tient en une ligne de comandes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for F in /users/*/.bash_profile; do echo "coucou" >> $F; done

  4. #4
    Membre habitué

    Inscrit en
    Novembre 2009
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 9
    Par défaut
    @fransoo:
    Merci beaucoup!
    Je pensais pas qu'on pouvais faire une boucle sans créer un script, et je ne voulais pas passer par un script, merci

    @Sve@r:
    La solution du tee ne convient pas trop si j'ai bien compris car il semble falloir lister tous les fichiers un par un, et il y en a beaucoup.

    Nathan

  5. #5
    Membre expérimenté Avatar de fransoo
    Inscrit en
    Novembre 2009
    Messages
    209
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 209
    Par défaut
    Citation Envoyé par nbarraille Voir le message
    @fransoo:
    Merci beaucoup!
    Je pensais pas qu'on pouvais faire une boucle sans créer un script, et je ne voulais pas passer par un script, merci
    Nathan
    En fait on peut (presue) tout faire directement en ligne de commande mais ce n'est pas toujours très lisible.
    Une démo, dans le shell taper (sans le prompt (en vert) !) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    user@host:$ for F in /users/*/.bash_profile
    > do echo "coucou" >> $F
    > done
    user@host:$

  6. #6
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 840
    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 840
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par fransoo Voir le message
    En fait on peut (presque) tout faire directement en ligne de commande
    Non non. On peut tout faire directement en ligne de commande.

    Attention toutefois à l'utilisation abusive du for i in liste_elem. Si jamais un des éléments de la liste possède un espace, le for découpera cet élément en 2 itérations et traitera d'abord le début, puis la fin en 2 étapes mais aucune étape ne fonctionnera puisque l'élément lui-même n'aura pas été traité.

    Vaut mieux lui préférer le read qui se cale sur le <return> de la fin de ligne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ls /users/*/.bash_profile |while read f
    do
        echo "coucou" >> $f
    done
    Citation Envoyé par nbarraille Voir le message
    Je pensais pas qu'on pouvais faire une boucle sans créer un script
    Toute instruction shell peut être appelée directement, même une instruction complexe comme un while. Si l'instruction nécessite plusieurs mots clefs, le shell proposera un prompt secondaire jusqu'à ce que tous les mots clefs aient été entrés. A ce moment là, l'instruction sera exécutée.

    Citation Envoyé par nbarraille Voir le message
    La solution du tee ne convient pas trop si j'ai bien compris car il semble falloir lister tous les fichiers un par un, et il y en a beaucoup.
    Mouais. On peut aussi utiliser une boucle pour "construire" la commande puis l'exécuter ensuite par un "eval" mais c'est se compliquer la vie pour rien vu que la boucle permet de répéter simplement l'instruction. Mais je ne savais pas que tu ne connaissais pas la boucle (je pensais que t'avais pas possibilité d'utiliser cette solution pour une raison personnelle) sinon je te l'aurais proposée d'entrée.
    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]

  7. #7
    Membre expérimenté Avatar de fransoo
    Inscrit en
    Novembre 2009
    Messages
    209
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 209
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    Attention toutefois à l'utilisation abusive du for i in liste_elem. Si jamais un des éléments de la liste possède un espace, le for découpera cet élément en 2 itérations et traitera d'abord le début, puis la fin en 2 étapes mais aucune étape ne fonctionnera puisque l'élément lui-même n'aura pas été traité.
    Certes, c'est bête mais j'y avais pensé : je sais que (normalement) les noms des répertoires des users ne comprenent pas d'espace.

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 01/06/2013, 21h40
  2. [IHS/WAS] Redirection vers URI (fichier HTML)
    Par ruff15 dans le forum Websphere
    Réponses: 0
    Dernier message: 31/05/2012, 11h32
  3. Réponses: 4
    Dernier message: 02/07/2008, 10h59
  4. redirection vers un fichier a partir d'une servlet
    Par air75 dans le forum Servlets/JSP
    Réponses: 1
    Dernier message: 03/02/2008, 21h34
  5. Récupérer sortie standard après redirection vers un fichier.
    Par sozie9372 dans le forum Entrée/Sortie
    Réponses: 3
    Dernier message: 22/03/2006, 15h10

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