Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > fr.comp.os.unix > #8119 > unrolled thread

[bash] select

Started byJo Engo <yl@icite.fr>
First post2023-12-09 14:09 +0000
Last post2023-12-11 18:32 +0000
Articles 12 — 3 participants

Back to article view | Back to fr.comp.os.unix


Contents

  [bash] select Jo Engo <yl@icite.fr> - 2023-12-09 14:09 +0000
    Re: [bash] select Jo Engo <yl@icite.fr> - 2023-12-09 21:15 +0000
      Re: [bash] select Jo Engo <yl@icite.fr> - 2023-12-09 21:59 +0000
      Re: [bash] select Jo Engo <yl@icite.fr> - 2023-12-10 16:52 +0000
        Re: [bash] select Christian Weisgerber <naddy@mips.inka.de> - 2023-12-11 18:34 +0000
          Re: [bash] select Jo Engo <yl@icite.fr> - 2023-12-13 14:38 +0000
            Re: [bash] select Christian Weisgerber <naddy@mips.inka.de> - 2023-12-13 23:00 +0000
          Re: [bash] select Jo Engo <yl@icite.fr> - 2023-12-14 15:21 +0000
            Re: [bash] select Jo Engo <yl@icite.fr> - 2023-12-14 15:43 +0000
            Re: [bash] select Christophe PEREZ <chris@novazur.fr> - 2023-12-14 18:51 +0000
            Re: [bash] select Christian Weisgerber <naddy@mips.inka.de> - 2023-12-14 18:38 +0000
    Re: [bash] select Christian Weisgerber <naddy@mips.inka.de> - 2023-12-11 18:32 +0000

#8119 — [bash] select

FromJo Engo <yl@icite.fr>
Date2023-12-09 14:09 +0000
Subject[bash] select
Message-ID<ul1sek$d5$2@rasp.pasdenom.info>
[bash] select

Voila je sèche. Je veux faire lire à select ses items dans un fichier. 
Après quelques essais infructueux sans le sed, j'arrive à un truc (très) 
lourd et qui ne marche pas
<code>
select toto in $(sed "s/^/\"/;s/$/\"/" menu); do  echo $toto; done </>
Qu'est-ce que je n'ai pas compris ? le sed fonctionne nickel mais select 
sépare les mots comme s'il n'y avait pas de double apostrophe. J'ai essayé 
avec de smples apostrophe mas c'est le même bingtz.
Merci de votre aide




-- 
Les vertus se perdent dans l'intérêt,
comme les fleuves se perdent dans la mer.
	-+- François de La Rochefoucauld (1613-1680), Maximes 171 -+-

[toc] | [next] | [standalone]


#8120

FromJo Engo <yl@icite.fr>
Date2023-12-09 21:15 +0000
Message-ID<ul2ld2$d5$4@rasp.pasdenom.info>
In reply to#8119
Le Sat, 9 Dec 2023 14:09:24 -0000 (UTC), Jo Engo a écrit :

> <code>
> select toto in $(sed "s/^/\"/;s/$/\"/" menu); do  echo $toto; done </>

Bon ça, donc, ça ne marche pas. J'ai trouvé un « solution » que je ne 
trouve pas du tout élégante mais qui « marche » :
(pour tester)

#!/bin/bash
read -p "fichier de menu : "
# attention, il y a bien un saut de ligne entre les quotes
 IFS='
' select item in $(cat $filee)
do 
	echo $item
# faire des trucs	
done
# fin script

Quelqu'un a quelque chose de mieux à me proposer ?





-- 
Si l'électron nous a servi à comprendre beaucoup de choses,
nous n'avons jamais bien compris l'électron lui-même.
	-+- Louis de Broglie -+-

[toc] | [prev] | [next] | [standalone]


#8121

FromJo Engo <yl@icite.fr>
Date2023-12-09 21:59 +0000
Message-ID<ul2nv8$2uo$1@rasp.pasdenom.info>
In reply to#8120
Jo Engo a écrit :
> Le Sat, 9 Dec 2023 14:09:24 -0000 (UTC), Jo Engo a écrit :


> #!/bin/bash
> read -p "fichier de menu : "
filee en paramètre  de read # sinon ça marchera pos
> # attention, il y a bien un saut de ligne entre les quotes
>  IFS='
> ' select item in $(cat $filee)
> do 
> 	echo $item
> # faire des trucs	
> done
> # fin script

> Quelqu'un a quelque chose de mieux à me proposer ?






[toc] | [prev] | [next] | [standalone]


#8122

FromJo Engo <yl@icite.fr>
Date2023-12-10 16:52 +0000
Message-ID<ul4qc3$d5$8@rasp.pasdenom.info>
In reply to#8120
Le Sat, 9 Dec 2023 21:15:14 -0000 (UTC), Jo Engo a écrit :

> #!/bin/bash read -p "fichier de menu : "
> # attention, il y a bien un saut de ligne entre les quotes (en fait je 
l'avais écrit sur une autre machine (mon téléphone android, avec un 
coquille) et je l'ai recopié de tête, rapido
>  IFS='
> ' select item in $(cat $filee)
> do
> 	echo $item
> # faire des trucs done # fin scrip

J'ai honte, je vous donne le script corrigé :

#!/bin/bash
read -p "fichier de menu : " filee
# attention, il y a bien un saut de ligne entre les quotes
 IFS='
' select item in $(cat $filee) # (*)
do 
	echo $item
# faire des trucs	
done
# fin script

(*) j'étais pas convaincu par
IFS='\n' un avis ?


-- 
Espoir : On a vu l'homme-araignée hier soir.  
	-+- Les nuls -+-

[toc] | [prev] | [next] | [standalone]


#8124

FromChristian Weisgerber <naddy@mips.inka.de>
Date2023-12-11 18:34 +0000
Message-ID<slrnunelhu.269.naddy@lorvorc.mips.inka.de>
In reply to#8122
On 2023-12-10, Jo Engo <yl@icite.fr> wrote:

> # attention, il y a bien un saut de ligne entre les quotes
>  IFS='
> ' select item in $(cat $filee) # (*)
>
> (*) j'étais pas convaincu par
> IFS='\n' un avis ?

Dans bash:
IFS=$'\n'

-- 
Christian "naddy" Weisgerber                          naddy@mips.inka.de

[toc] | [prev] | [next] | [standalone]


#8125

FromJo Engo <yl@icite.fr>
Date2023-12-13 14:38 +0000
Message-ID<ulcflr$n90$1@rasp.pasdenom.info>
In reply to#8124
Le Mon, 11 Dec 2023 18:34:38 -0000 (UTC), Christian Weisgerber a écrit :

> Dans bash:
> IFS=$'\n'

C'est noté, mais on me demande expressément de ne pas utilise IFS. Comment 
puis-je faire, une idée ?



-- 
On a le droit de dire du mal des femmes;
on n'a pas le droit de dire le mal d'une femme.
	-+- Alexandre Dumas (1802-1870) -+-

[toc] | [prev] | [next] | [standalone]


#8126

FromChristian Weisgerber <naddy@mips.inka.de>
Date2023-12-13 23:00 +0000
Message-ID<slrnunkdrj.ga0.naddy@lorvorc.mips.inka.de>
In reply to#8125
On 2023-12-13, Jo Engo <yl@icite.fr> wrote:
>
>> Dans bash:
>> IFS=$'\n'
>
> C'est noté, mais on me demande expressément de ne pas utilise IFS. Comment 
> puis-je faire, une idée ?

Avec un tableau. On pourrait remplir le tableau avec une boucle :

    i=0
    while read -r tableau[i]; do
            ((i++))
    done <$filee

Ou plus court avec mapfile :

    #!/usr/local/bin/bash
    read -p "fichier de menu : " filee
    mapfile -t tableau <$filee
    select item in "${tableau[@]}"
    do
            echo $item
    done

-- 
Christian "naddy" Weisgerber                          naddy@mips.inka.de

[toc] | [prev] | [next] | [standalone]


#8127

FromJo Engo <yl@icite.fr>
Date2023-12-14 15:21 +0000
Message-ID<ulf6gu$r3t$1@rasp.pasdenom.info>
In reply to#8124
Le Mon, 11 Dec 2023 18:34:38 -0000 (UTC), Christian Weisgerber a écrit :


>> Dans bash:
>> IFS=$'\n'

Pas le choix, je vais être obligé de venir à ça car :

>    mapfile -t tableau <$filee
>    select item in "${tableau[@]}"

ne marche pas : j'ai un mot par item et non la phrase souhaitée (qui se 
trouvait dns la ligne. Soyons précis je fais exactement :
 « 
mapfile -t tableau < liste-sauvegarde
select item in ${tableau[@]}
 »

avec liste-sauvegarde qui contient eg.

des trucs bizarres
un truc très important
quelques 
deux de plus
l'autre

et alors quand je lance mon script select donne :
1) des	        3) bizarres    5) truc	      7) important   9) deux	   
11) plus
2) trucs        4) un	       6) très	      8) quelques   10) de	   
12) l'autre

Alors que j'attendais :

1) des trucs bizarres		3 quelques
2) un truc très important	4 deux de plus
5) l'autre

-- 
 attend je suis pas un r3b3lz moi
 juste un type ss cervo
 -+- underfog in GPJ: C'est lamer qui prends l'homme -+-

[toc] | [prev] | [next] | [standalone]


#8128

FromJo Engo <yl@icite.fr>
Date2023-12-14 15:43 +0000
Message-ID<ulf7qd$r3t$2@rasp.pasdenom.info>
In reply to#8127
Le Thu, 14 Dec 2023 15:21:02 -0000 (UTC), Jo Engo a écrit :

> des trucs bizarres

À propose de trucs bizarres, mon select est dans un while, et au deuxième 
appel j'ai le résultat attendu.



-- 
PETIT BOULOT

Grat! Grat! Grat! Grat! Grat! Grat!
P : Tu fais quoi, là ?
M : De l'argent de poche... Je vends de la farine animale au noir à la 
FNSEA...

[toc] | [prev] | [next] | [standalone]


#8129

FromChristophe PEREZ <chris@novazur.fr>
Date2023-12-14 18:51 +0000
Message-ID<ulfis5$3fo8j$1@news.usenet.ovh>
In reply to#8127
Le Thu, 14 Dec 2023 15:21:02 -0000 (UTC), Jo Engo a écrit :

> avec liste-sauvegarde qui contient eg.
> 
> des trucs bizarres
> un truc très important
> quelques
> deux de plus
> l'autre

Ah, enfin des détails sur le contexte.
Il aura fallu du temps et des posts inutiles jusque là.

Sans parler du "mais on me demande expressément de ne pas utilise IFS"

C'est qui "on" ? Le prof ?

unset tableau
while read LINE ; do
	tableau+=("$LINE")
done < liste-sauvegarde
select item in "${tableau[@]}" ; do
	echo $item
done

[toc] | [prev] | [next] | [standalone]


#8130

FromChristian Weisgerber <naddy@mips.inka.de>
Date2023-12-14 18:38 +0000
Message-ID<slrnunmitr.19it.naddy@lorvorc.mips.inka.de>
In reply to#8127
On 2023-12-14, Jo Engo <yl@icite.fr> wrote:

>>    mapfile -t tableau <$filee
>>    select item in "${tableau[@]}"
>
> ne marche pas : j'ai un mot par item et non la phrase souhaitée (qui se 
> trouvait dns la ligne. Soyons précis je fais exactement :
>  « 
> mapfile -t tableau < liste-sauvegarde
> select item in ${tableau[@]}

Il faut utiliser "${tableau[@]}" avec les " " pour la substitution
correcte.

-- 
Christian "naddy" Weisgerber                          naddy@mips.inka.de

[toc] | [prev] | [next] | [standalone]


#8123

FromChristian Weisgerber <naddy@mips.inka.de>
Date2023-12-11 18:32 +0000
Message-ID<slrnunele0.269.naddy@lorvorc.mips.inka.de>
In reply to#8119
On 2023-12-09, Jo Engo <yl@icite.fr> wrote:

> select toto in $(sed "s/^/\"/;s/$/\"/" menu); do  echo $toto; done </>
> Qu'est-ce que je n'ai pas compris ?

Le shell traite ses opérations dans un ordre particulier.
Les guillemets sont traités _avant_ la substitution de commande.

-- 
Christian "naddy" Weisgerber                          naddy@mips.inka.de

[toc] | [prev] | [standalone]


Back to top | Article view | fr.comp.os.unix


csiph-web