Используйте debconf для получения массивов произвольной длины пользовательских значений

Используйте debconf для получения массивов произвольной длины пользовательских значений

Я создаю несколько файлов deb-пакетов и столкнулся с рядом ситуаций, когда мне хотелось бы получить один из них.или большепроизвольные строковые значения (т.е. НЕ множественный выбор) от пользователя. В настоящее время я не вижу способа сделать это, и мне интересно, возможно ли это.

Примером может служить настройка пула администраторов для машины. В этом случае я могу спросить:

$ Please add a user:
$ 
$ username: someuser
$ password:
$ password set successfully
$ 
$ User "someuser" successfully added. Would you like to add another? [y,n]: y
$
$ username: notheruser
$ password: 
$ password set successfully
$
$ Use "notheruser" successfully added.....

Предположительно, это даст массив для пользователей и соответствующий массив для паролей. (Примечание: пример несколько надуманный, поэтому мне неинтересно обсуждать, является ли этот конкретный вариант использования хорошей идеей.)

Есть ли какая-то конвенция сообщества для решения этой проблемы? Есть ли решение confmodule, о котором я не знаю?

решение1

Хорошо, похоже, нет хорошего способа сделать это. Я отправляю этот ответ (хотя и не принимаю его) каквозможныйрешение, которое я, вероятно, воспользуюсь им в краткосрочной перспективе.

Вы можете собрать простые ответы массива в виде списков, разделенных пробелами, а затем просто преобразовать их в массивы bash следующим образом:

$ read ANS
$ these are four values
$ ANS=($ANS)
$ for a in "${ANS[@]}" do
$     echo "Answer: $a"
$ done
$ 
$ # Outputs:
$ #
$ # Answer: these
$ # Answer: are
$ # Answer: four
$ # Answer: values

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

$ read ANS
$ these are 'four or five' values
$ eval "ANS=($ANS)"
$ for a in "${ANS[@]}" do
$     echo "Answer: $a"
$ done
$ 
$ # Outputs:
$ #
$ # Answer: these
$ # Answer: are
$ # Answer: four or five
$ # Answer: values

Опять же, не идеально, но пока у меня так.

Связанный контент