Variáveis no radiolist de diálogo

2

Eu tenho o seguinte radiolist de diálogo, que funciona bem.

#!/bin/bash

ch1a="1"
ch1b="Fri, 20/3/15"
ch2a="2"
ch2b="Sun, 21/6/15"
ch1="\"$ch1a\" \"$ch1b\""

dialog --title "Equinoxes and Solistices"  \
--radiolist "When is the Winter Solictice?" 15 60 4 \
"$ch1a" "$ch1b" ON \
"$ch2a" "$ch2b" OFF \
"3" "Wed, 23/9/15" OFF \
'4' 'Mon, 21/12/15' OFF 2>/tmp/menu.sh.$$

No entanto, se eu substituir a primeira escolha por "$ch1" ou "${ch1[@]}" , mesmo com definições diferentes de ch1 , não obtenho resultado.

Meu objetivo final é criar um radiolista dinâmico, com todas as opções incluídas como uma string ou uma matriz. Eu já tentei esta solução , mas não funciona quando as opções contêm espaços em branco.

    
por Theo 21.04.2015 / 13:00

2 respostas

2

O --radiolist precisa de duas variáveis, não uma. Conforme explicado em man dialog :

--radiolist text height width list-height  [ tag item status ] ...
      A  radiolist  box is similar to a menu box.  The only difference is
      that you can indicate which entry is currently selected, by setting 
      its status to on.

Como você pode ver acima, ele precisa do item tag e , além do status. É por isso que ele falha quando você apenas dá um (mesmo que esse seja expandido para um array).

Você ainda pode usar uma matriz, mas precisará fazer algo assim:

#!/bin/bash

ch=( "1" "Fri, 20/3/15" "2" "Sun, 21/6/15" "3" "Wed, 23/9/15" 
     "4" "Mon, 21/12/15")

dialog --title "Equinoxes and Solistices"  \
--radiolist "When is the Winter Solictice?" 15 60 4 \
"${ch[0]}" "${ch[1]}" ON \
"${ch[2]}" "${ch[3]}" OFF \
"${ch[4]}" "${ch[5]}" OFF \
"${ch[6]}" "${ch[7]}" OFF 2>/tmp/menu.sh.$$
    
por 21.04.2015 / 13:45
1

Estou apenas trabalhando em um caso um pouco mais distorcido.

Como Theo pergunta acima, eu estava no caso de preencher automaticamente as opções em um loop. Shell escapando de espaços pode ser complicado, então foi isso que eu fiz.

local LIST=()                                                                                                                                                                                                                                
for item in *.sh; do
  local DESC="$( grep "DESCRIPTION=" $item | sed 's|^DESCRIPTION=||' )"
  LIST+=( $( basename $item .sh ) "$DESC" off )
done
local script
script=$( dialog --backtitle "NextCloudPi configuration" \
                 --radiolist "Select program to configure and activate:" 20 80 10 \
                 "${LIST[@]}" \
          3>&1 1>&2 2>&3 )
echo "$script was selected"

$DESC é uma variável de shell que normalmente contém espaços e é isso que torna esse exemplo complicado. Como posso fazer o diálogo separar os espaços em $DESC dos espaços para separar seus parâmetros?

Eu decidi usar arrays, pois eles são uma abordagem mais natural para evitar esse tipo de problema.

Você pode ver o código completo e resultar em

link

Veja mais sobre matrizes versus divisão de espaço em

link

    
por 11.03.2017 / 10:57