Cmd SELECT,problème espaces dans fichier conf

Résolu
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.

3 réponses

  1. Contributeur
    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
    1. Ça marche nikel. Je te remercie amplement.
      :)
      0
      1. 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
        1. Contributeur
          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
        2. 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