choisir une ligne d'un fichier avec une boucle select [Bash] - Shell/Batch - Programmation
Marsh Posté le 20-04-2007 à 10:45:18
petitomme a écrit : Bonjour à tous, |
Hello !!!
Bon, ton problème est parfaitement explicite. L'ennui c'est que la boucle "select" travaille en effet mot à mot. C'est son principe et on y peut rien (comme la boucle "for" ).
Mais tu peux arriver à gruger, par exemple, si tu veux proposer 3 phrases en choix, tu peux faire
select var in "phrase 1" "phrase 2" "phrase 3" (avec des guillemets pour grouper les mots de chaque phrase)
Donc l'idée, c'est d'arriver à créer un truc qui t'affiche ton fichier ligne par ligne, mais en y rajoutant des guillemets. Normallement , ceci devrait marcher
select variable in `while read ligne ; do echo "\"$ligne\"" ; done <a `
do
...
done
En fait, tu y étais presque avec ta 2° solution. Il te manquait juste les guillemets en début et fin de ligne...
Marsh Posté le 20-04-2007 à 15:09:09
Ok merci beaucoup de ton aide,
En fait j'ai rusé autrement (je devais faire ce script pour aujourd'hui) : vu qu'il s'agissait d'un fichier de configuration qui était rempli par ce même script, j'ai séparé les mots de chaque ligne par ":" plutôt qu'un espace.
C'est un peu brouillon quand on affiche les lignes mais ça m'a permis de finir à temps.
Marsh Posté le 20-04-2007 à 17:03:11
petitomme a écrit : Ok merci beaucoup de ton aide, |
Surtout que ma solution proposée ce matin ne fonctionne pas. En fait, les guillemets doivent être attrappés par le shell avant l'interprétation et lorsque le "echo" s'affiche, l'interprétation a commencé donc ça ne marche pas.
J'ai cherché plein de moyens et j'ai finallement trouvé via la commande "eval". Cette commande a pour but d'interpréter ses arguments puis de faire exécuter le résultat par le shell => ex: eval date
Donc j'ai trouvé en faisant ceci
fic=`cat fichier |while read lig; do echo "\"$lig\""; done` |
Marsh Posté le 18-04-2007 à 18:09:54
Bonjour à tous,
je ne pense pas que mon titre soit très explicite mais c'est ce que j'ai trouvé de mieux, alors je m'en excuse.
Je cherche, pour un script bash, à proposer à l'utilisateur de choisir une ligne d'un fichier, pour cela je pense utiliser une structure select, cependant je n'arrive pas à énumérer le fichier ligne à ligne :
par exemple, j'ai essayé select variable in `cat fichier` ; ...
dans ce cas là, j'ai en 1) le premier mot , en 2) le second mot ...
j'ai aussi cherché en faisant :
select variable in `while read ligne ; do echo "$ligne" ; done <a `; do...
"while read ligne ; do echo "$ligne" ; done <a" affiche le fichier ligne à ligne
mais rebelote, ça ne marche pas comme je veux, ça affiche mot à mot
Le but est de demander à l'utilisateur la ligne à supprimer dans un fichier, l'avantage du select est de ne pas avoir à retaper toute la ligne ce qui évite des fautes de frappe et autres.
Est-ce que vous auriez une idée de la manière de procéder, ou des autres pistes pour arriver au même résultat ?
Merci de m'avoir lu et de votre aide