Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1012 connectés 

  FORUM HardWare.fr
  Programmation
  Shell/Batch

  [Shell] Executer des commandes en provenance d'une liste

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Shell] Executer des commandes en provenance d'une liste

n°2238610
chico008
what the wookie says ?
Posté le 23-09-2014 à 12:48:15  profilanswer
 

Bonjour
 
Pour simplifier des demandes, j'essaie de créée un script, qui prend en paramètre un fichier, contenant une liste de commande a executer.
J'arrive a lire le fichier, ligne par ligne, sans soucis.
Par contre, je n'arrive pas a faire comprendre a mon script, que les lignes, sont des commades a lancés.
a chaque fois j'ai des erreur de paramètre pas reconu, ou des erreur not found.
 
exemple tout bete, avec un fichier qui contient des echo:

Code :
  1. $>cat test.com
  2. echo "Bonjour"
  3. echo -e "\t Ca va ?"


 
quand je fais la boucle suivante :  

Code :
  1. for trait in $(cat test.com)
  2. do
  3. $trait
  4. done


 
J'ai ces erreurs :

Code :
  1. ksh[3]: "Bonjour":  not found
  2. ksh[3]: -e:  not found
  3. ksh[3]: "\t:  not found
  4. ksh[3]: Ca:  not found
  5. ksh[3]: va:  not found
  6. ksh[3]: ?":  not found


 
La c'etait pour l'exemple, mais en réalité les commandes sont des shell avec des paramètres
j'ai essayer avec `$trait`ou $($trait), ca n'a pas changer grand chose (à part les erreurs)
 
Comment faire comprendre à mon script que ce sont des commandes, avec des paramètres, a executé ?


---------------
Serveur HFR - OpenTTD
mood
Publicité
Posté le 23-09-2014 à 12:48:15  profilanswer
 

n°2238617
olivthill
Posté le 23-09-2014 à 13:59:24  profilanswer
 

L'erreur est ultra classique. Je l'ai vue un million de fois.
 
Pour lire un fichier ligne à ligne, il ne faut jamais faire : for trait in $(cat test.com)
 
En effet in ne s'arrête pas seulement à la fin d'une ligne, mais aussi quand il voit un espace.
Donc, cela ne peut marcher que dans le cas où une ligne ne contient qu'un seul mot.
 
La solution consiste à faire : cat test.com | while read trait

n°2238806
chico008
what the wookie says ?
Posté le 25-09-2014 à 07:00:07  profilanswer
 

effectivement, j'y pense jamais a cette alternative.
Trop l'habitude de traiter des listes simple.
 
Merci :)


---------------
Serveur HFR - OpenTTD
n°2238964
h3bus
Troll Inside
Posté le 26-09-2014 à 11:32:59  profilanswer
 

Tu peux aussi changer la variable IFS avant le for ... in et le restaurer ensuite

Code :
  1. OLD_IFS=${IFS}
  2. IFS="
  3. "
  4. #Le script avec la boucle
  5. IFS=${OLD_IFS}


---------------
sheep++
n°2239051
chico008
what the wookie says ?
Posté le 27-09-2014 à 06:40:28  profilanswer
 

l'IFS j'evite d'y toucher, uen fois en le modifiant pour des test ca a fait tomber des script en prod, donc bon, j'evite.


---------------
Serveur HFR - OpenTTD

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Shell/Batch

  [Shell] Executer des commandes en provenance d'une liste

 

Sujets relatifs
Récupérer une liste de ville avec PHP/CurlParcourir une liste avec iterator
Excel : Résumé / Liste déroulanteAfficher la ligne d'une table après avoir choisi son ID dans une liste
Informations sur les commandes paypalshell windows gitbash ou cmder ?
lancer des commandes python en paralleleConvertir un element d'une liste en string
Comment s'appelle cette fenetre avec liste deroulante?generer code barre pour une liste d'articles sous excel
Plus de sujets relatifs à : [Shell] Executer des commandes en provenance d'une liste


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR