Clément Hermann wrote:
bayrouni a écrit :
Sur la ligne de commande dans un terminal, j'execute: i=0; infostr=(); while read line; do infostr[i++]="$line"; echo "$line"; done < <(cddb.pl -I cddb query $(cd-discid /dev/cdrom)); echo "${infostr[0]}" Celà m'affiche 16 lignes contenant des informations sur mon cd audio, dont notemment les titres (les chansons)
category: misc cddbid: bd0c0f10 trackno: 16 track 1: Les Flamands track 2: La Valse A Milie Temps track 3: Jacky track 4: La Chanson Des Vieux Amants track 5: Ne Me Quitte Pas etc ... track 16: Le Moribond
Le problème apparaît à partir du moment ou je mets ce code dans un script bash que j'appelle cdripper.sh, j'ai alors cette erreur: cdripper.sh: line 56: syntax error near unexpected token `<' cdripper.sh: line 56: ` while read line; do infostr[i++]="$line"; echo "$line"; done < <(cddb.pl -I cddb query $(cd-discid /dev/cdrom)); echo "${infostr[0]}"'
Drôle de syntaxe... j'avais jamais rencontré <(commande) auparavant. D'ailleurs on dirait bien que c'est ça qui ne lui plait pas ! ;)
À ma connaissance, < et > ne fonctionnent que pour les fichiers en bash. Si tu veux récupérer la sortie d'une commande dans un while, utilise un pipe :
commande | while read line; do code done
cette commande marche syntaxiquement correctement, mais en bash, il y a un subterfuge qui permet de récuperer les varibles dans la boucles en dehors de celle-ci. Parce que si j'ai bien compris, dans une boucle, bash crée un nouveau (sous)shell.
J'utilise GNU bash, version 3.2.25(1)-release (x86_64-unknown-linux-gnu)
Le but est de mettre chaque ligne retourné par cddb.pl -I cddb query $(cd-discid /dev/cdrom) dans un élément du tableau infostr en dehors de la boucle (après la boucle) (encodage ogg avec des tags).
Bien entendu, il y a des logiciels super beaux et super facils pour faire cette tâche, mais comme vous l'aurez compris, ce n'est pas mon but.
Je vous remercie d'avoir été patient et de m'avoir lu jusqu'à la fin pour une question de bash . en fait j'ai lu la definition que vous donnez au bash dans le wiki :)
Celle là : http://cli.asyd.net/home/shell/bash ?
Non parce que si il y en a une autre, en tant que vieil irréductible du bash refusant de passer à zsh pour des tas de raisons (et même quelques bonnes dans le tas, sisi), ça m'intéresse ;)