Я создаю несколько файлов 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
Опять же, не идеально, но пока у меня так.