Cmd SELECT,problème espaces dans fichier conf

Résolu
sebmartin -  
 sebmartin -
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. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
     
    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
  2. sebmartin
     
    Ça marche nikel. Je te remercie amplement.
    :)
    0
  3. sebmartin
     
    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. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
       
      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. sebmartin
       
      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