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

213
kael

Я создаю некоторые файлы пакета 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..... 

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

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

-1
@ Someone спасибо за анонимный downvote без комментариев .... kael 6 лет назад 0

1 ответ на вопрос

0
kael

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

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

$ read ANS $ these are four values $ ANS=($ANS) $ for a in "$" 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 "$" do $ echo "Answer: $a" $ done $  $ # Outputs: $ # $ # Answer: these $ # Answer: are $ # Answer: four or five $ # Answer: values 

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

Похожие вопросы