[Résolu] [KSH] Executer plusieurs commandes dans une variable

Executer plusieurs commandes dans une variable [Résolu] [KSH] - Shell/Batch - Programmation

Marsh Posté le 07-05-2012 à 16:10:48    

Bonjour,
 
Pour les besoins d'un script kornshell (ksh), je dois exécuter plusieurs commandes séparées par un point-virgule (;) contenues dans une variable TRAITEMENT.
Le problème est que les différentes commandes sont éxecutées comme si elles formaient seulement 1 commande.
 
Un exemple sera plus clair :
 
Lorsque je tape directement les commandes séparées par un point-virgule :

Code :
  1. echo 1;echo 2
  2. > 1
  3. > 2


 
Maintenant lorsque je passe le traitement dans une variable. Le echo m'affiche bien exactement ce que j'ai au dessus, pourtant à l'execution je n'ai pas le même comportement :

Code :
  1. TRAITEMENT=echo 1;echo 2
  2. echo $TRAITEMENT
  3. > echo 1;echo 2
  4. $TRAITEMENT
  5. > 1;echo 2


 
Comment puis-je faire pour executer ces 2 commandes dans ma variable ?
 
Par avance merci pour votre aide.


Message édité par ChOoN le 10-05-2012 à 18:04:51
Reply

Marsh Posté le 07-05-2012 à 16:10:48   

Reply

Marsh Posté le 09-05-2012 à 15:53:10    

salut,
 
ce procédé n'est pas recommandé.
utilise plutôt une fonction.

Reply

Marsh Posté le 09-05-2012 à 16:25:55    

Il faudrait utiliser \c pour empêcher le retour à la ligne (si c'est ça le problème). Par exemple :
 

echo "1 \c"; echo "2 \c";


Reply

Marsh Posté le 09-05-2012 à 17:55:53    


 
En fait c'est pour la simplicité de la conf.
Dans le fichier de conf il y a une partie déclencheur, puis l'autre partie execution de commande.
 
Par exemple je surveille dans le repertoire /tmp l'arrivée du fichier foo.bar, et lorsqu'il arrive je le copie dans un autre repertoire puis je lance un traitement.
 
Ce qui donnera :
 

Code :
  1. /tmp/foo.bar,cp % /autreRepertoire;/foo/bar/traitement %


 


---------------
Trop d'argent ? comment se ruiner . com
Reply

Marsh Posté le 10-05-2012 à 16:23:30    

Il faut utiliser eval :

Code :
  1. > T='echo 1 ; echo 2'
  2. > $T
  3. 1 ; echo 2
  4. > eval $T
  5. 1
  6. 2

Reply

Marsh Posté le 10-05-2012 à 18:04:10    

Nukolau a écrit :

Il faut utiliser eval :

Code :
  1. > T='echo 1 ; echo 2'
  2. > $T
  3. 1 ; echo 2
  4. > eval $T
  5. 1
  6. 2



 
 
Parfait ! Ca marche niquel. Merci !


---------------
Trop d'argent ? comment se ruiner . com
Reply

Marsh Posté le 11-05-2012 à 05:20:20    

Il ne faut pas utiliser eval.
On peut le faire, mais c'est dangereux.
(les solutions faciles ne sont souvent pas les plus sûres : tu prends le raccourci qui passe dans le bois, mais il y a un loup !)
 
utilise une fonction.

Reply

Marsh Posté le 11-05-2012 à 09:31:49    

Je ne comprends pas pourquoi tu dis qu'il ne faut pas utiliser eval ? pour quelle raison ?
J'ai déjà écrit un paquet de script avec sans avoir eu de problèmes (très pratique par exemple pour log la commande exacte que tu vas exécuter).

Reply

Marsh Posté le 11-05-2012 à 09:52:59    

c'est expliqué ici au #14
et avec plus de détail


Message édité par Profil supprimé le 11-05-2012 à 09:53:37
Reply

Marsh Posté le 11-05-2012 à 14:30:28    

Effectivement, je comprends ce que tu voulais dire par c'est dangereux.
 
Maintenant, à partir du moment où tu es sur de ce que tu fait (ie tu ne te bases pas sur des données accessibles à un tiers), ben pas de soucis.
 
Enfin tu as raison, le warning sur cette commande n'était pas de trop, même si dans le cas présent, si j'ai bien compris la demande initiale, le problème ne devrait pas avoir lieu.

Reply

Marsh Posté le 11-05-2012 à 14:30:28   

Reply

Marsh Posté le 24-05-2012 à 11:31:11    

En effet merci pour cette précision. Enfin dans mon cas je maîtrise ce qu'il y a dans les variables et du coup je vais éviter d'allonger le temps de développement.


---------------
Trop d'argent ? comment se ruiner . com
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed