Tendo problemas ao passar aspas duplas para o diálogo

0

Estou trabalhando em um script para automatizar a gravação de áudio, usando o comando 'dialog' para criar um menu interativo para nomear canais adequadamente. Eu tenho uma lista dos nomes dos canais em uma matriz. Eu quero que o formulário em si esteja em branco, mas não consigo passar os parâmetros corretos para o diálogo.

Se eu escapar as aspas, o formulário aparece como deveria, mas as aspas aparecem na área de entrada, se eu não escapar as aspas, isso resulta em uma confusão ilegível, e se eu ecoar o comando para outro arquivo e executá-lo, funciona exatamente como eu quero. Preciso de ajuda para descobrir como fazer com que o diálogo seja executado dessa maneira.

Este é o código:

#!/bin/bash
declare -a CHANNELS
CHANNELS=(meet george jetson his boy elroy daughter judy)

channameiter ()
{
        for i in ${!CHANNELS[@]};
        do
                echo  -e "${CHANNELS[$i]}:" $((i + 1)) 1 \'\' $((i + 1)) 25 30 30 \
        done
}

dialog --form "Channels" 30 60 16 'channameiter'

e este é o código que é repetido em outro arquivo e, em seguida, executado, que é executado corretamente.

dialog --form Channels 30 60 16 meet: 1 1 "" 1 25 30 30 george: 2 1 "" 2 25 30 30 jetson: 3 1 "" 3 25 30 30 his: 4 1 "" 4 25 30 30 boy: 5 1 "" 5 25 30 30 elroy: 6 1 "" 6 25 30 30 daughter: 7 1 "" 7 25 30 30 judy: 8 1 "" 8 25 30 30

Alguma idéia?

    
por Seth O'Bannion 04.09.2015 / 16:30

1 resposta

2

Aqui está uma maneira de fazer isso, na qual a matriz de argumentos de linha de comando é construída iterativamente:

#!/bin/bash
args=(Channels 30 60 16)
i=0
for chan in meet george jetson his boy elroy daughter judy; do
   ((++i))
   args+=("$chan" $i 1 "" $i 25 30 30)
done
dialog --form "${args[@]}"

É claro que isso poderia ter usado a mesma técnica de array e iteração de CHANNELS do seu original. (Pessoalmente, acho que eu tomaria os nomes dos canais das opções da linha de comando para o script, caso em que você poderia escrever for chan; do .)

    
por 04.09.2015 / 18:10