Я работаю над сценарием для автоматической записи звука, используя команду 'dialog' для создания интерактивного меню с соответствующим названием каналов. У меня есть список имен каналов в массиве. Я хочу, чтобы сама форма была пустой, но я не могу передать нужные параметры в диалог.

Если я экранирую кавычки, форма появляется так, как и должна, но кавычки появляются в области ввода. Если я не экранирую кавычки, это приводит к искаженному беспорядку, и если я передаю команду в другой файл и выполняю ее работает точно так, как я хочу. Мне нужна помощь, чтобы понять, как заставить диалог работать таким образом.

Это код:

#!/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`

и этот код отображается в другом файле и затем выполняется, что выполняется правильно.

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

Есть идеи?

1 ответ1

2

Вот один из способов сделать это, в котором массив аргументов командной строки создается итеративно:

#!/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[@]}"

Конечно, для этого мог бы использоваться тот же массив CHANNELS и техника итерации, что и в вашем оригинале. (Лично я думаю, что я бы перенес названия каналов из параметров командной строки в скрипт, и в этом случае вы могли бы просто написать for chan; do .)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .