Cmd SELECT,problème espaces dans fichier conf

Résolu/Fermé
sebmartin - 14 avril 2011 à 12:05
 sebmartin - 15 avril 2011 à 18:47
Bonjour,

Voilà mon problème. J'utilise la commande SELECT pour obtenir un menu interactif avec une liste de choix préconfiguré dans un fichier de conf. Le souci est que dans ce fichier de conf, il y a des espaces, et je n'arrive pas à retrouver l'intégralité de ma ligne dans le menu. Voici en clair ce que ça donne :

- Mon fichier de conf :
$ cat ../CONF/base.conf
Base 1
Base 2
Base 3


- Résultat :
select BASE in 'cat ../CONF/base.conf ' 'quit'; do echo $BASE; done

1) Base
2) 1
3) Base
4) 2
5) Base
6) 3
7) quit
#?



Évidemment ce n'est pas du tout ce que je souhaites, ce que j'aimerais c'est ceci :

select BASE in 'cat ../CONF/base.conf ' 'quit'; do echo $BASE; done

1) Base 1
2) Base 2
3) Base 3
4) quit
#?



Voilà, j'espère que j'ai été clair dans mes explications et que vous saurez m'aider.
Par avance merci.


A voir également:

3 réponses

zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 407
14 avril 2011 à 15:48
Salut,

Il te faut changer le séparateur de champs en entrée (IFS) :

$ OIFS=$IFS;IFS=$'\n';select BASE in $(cat base.conf) 'quit';do echo $BASE; done;IFS=$OIFS
1) Base 1
2) Base 2
3) Base 3
4) quit
#? 2
Base 2
#?
0
Ça marche nikel. Je te remercie amplement.
:)
0
Zut apparemment cela ne fonctionne pas en ksh. Il me remplace les caractères "n" par un retour chariot.
Il n'y a pas un équivalent pour ksh ??
Merci encore une fois.
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 407
14 avril 2011 à 17:43
Essaye en tapant le retour à la ligne directement dans ton shell (ou script) :

OIFS=$IFS;IFS=$'
';select BASE in $(cat base.conf) 'quit';do echo $BASE; done;IFS=$OIFS
0
Oui merci c'est la solution, mise à part le fait que j'ai dû enlever le ";" avant le select :

OIFS=$IFS;IFS=$'
'
select BASE in $(cat base.conf) 'quit';do echo $BASE; done;IFS=$OIFS


Mise à part ça marche super. Merci beaucoup :)
0