recuperation resultat dans variable

recuperation resultat dans variable - Shell/Batch - Programmation

Marsh Posté le 01-06-2007 à 12:02:49    

Bonjour,
voici le problème que je n'arrive pas à résoudre:
 
Je suis dans un répertoire et je récupère les 2 derniers fichiers créés avec cette commande:
ls -t *.txt | head -2
 
Ca me donne ca comme résultat:
fic1.txt
fic2.txt
 
Maintenant, dans la suite de mon script, je voudrai utiliser ce résultat en mettant fic1.txt dans la variable a et fic2.txt dans la variable b. (Pour la suite, pouvoir faire un diff, par exemple).
Mais je n'arrive pas à le faire.
Si quelqu'un peut m'aider?
Merci

Reply

Marsh Posté le 01-06-2007 à 12:02:49   

Reply

Marsh Posté le 01-06-2007 à 13:54:52    

Voici une façon de faire :
 
$ ls -t *.txt | head -2
tbl.txt
cnv.txt
$ fichiers=$(ls -t *.txt | head -2)
$ echo $fichiers | read a b
$ echo $a
tbl.txt
$ echo $b
cnv.txt
$  
 
et une autre (toujours avec read) :
 
$ ls -t *.txt | { read a; read b; }
 
une dernière :
 
$ set -- $(ls -t *.txt | head -2)
$ a=$1
$ b=$2  
 
Tu peux aussi faire directement le diff :
 
$ diff $(ls -t *.txt | head -1)
 
Jean-Pierre.

Reply

Marsh Posté le 01-06-2007 à 14:25:48    

merci :)

Reply

Marsh Posté le 01-06-2007 à 20:56:17    

Ouais alors le coup du read, j'avais pensé en parler, puis je me suis dit c'est donner des verges pour se faire battre. Pipe, sous-shell, tout ça... Avec la pluspart des shells (en fait tous sauf ksh je crois), ça ne marchera pas. a et b sont sont créés dans un sous-process, donc dans ton script tu ne les verra pas. Il y a moyen de contourner, par exemple en mettant entre parenthèse toute la partie à droite du pipe, jusqu'à l'endroit où tu utilises a et b. Mais bon c'est compliqué.

Reply

Marsh Posté le 01-06-2007 à 22:24:34    

matafan a écrit :

Ouais alors le coup du read, j'avais pensé en parler, puis je me suis dit c'est donner des verges pour se faire battre. Pipe, sous-shell, tout ça... Avec la pluspart des shells (en fait tous sauf ksh je crois), ça ne marchera pas. a et b sont sont créés dans un sous-process, donc dans ton script tu ne les verra pas. Il y a moyen de contourner, par exemple en mettant entre parenthèse toute la partie à droite du pipe, jusqu'à l'endroit où tu utilises a et b. Mais bon c'est compliqué.


Je travaille habituellement avec ksh où cela fonctionne trés bien.
 
Je viens faire le test sous bash (cygwin, que j'utilise depuis peu sur mon PC chez moi) et effectivement cele ne fonctionne pas.
Cependant, avec bash il est possible d'utiliser la forme <<< de la redirection (je viens de découvrir ça en lisant le man):
 
$ read a b <<<$(ls -t *.txt|head -2)
 
 
Jean-Pierre.

Reply

Sujets relatifs:

Leave a Replay

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