Я пишу сценарий оболочки с несколькими переменными, которые должны быть настроены пользователем. Там будет установщик для загрузки и настройки скрипта, возможно, задавая ряд вопросов. Рассматриваемый скрипт предназначен для других разработчиков.
Это может быть реализовано несколькими способами:
Используйте заполнители в самом скрипте и используйте
sed
для их замены во время установки (что-то вроде этого: /programming/415677/how-to-replace-placeholder-in-a-text-file )Плюсы: все определения переменных содержатся в скрипте. Скрипт легко загрузить вручную и настроить переменные для пользователей, которые предпочитают редактор над установщиком.
Минусы: Трудно перенастроить переменные через установщик, как только они появятся. Если я не создам более сложное регулярное выражение, которое будет подвержено ошибкам.
Используйте файл конфигурации , в основном другой сценарий оболочки с назначениями, и используйте его
source
для включения. (И, вероятно, поместите это в~/.scriptname
? Основной сценарий скопирован в/usr/local/bin
)Плюсы: легко перенастроить скрипт. Можно даже добавить параметр для этого из основного сценария (возможно, будет работать и в первом решении, но редактирование сценария из себя не очень хорошая идея)
Минусы: сценарий теперь зависит от двух файлов, и пользователь должен запустить установщик для файла конфигурации, который будет создан. Это может быть решено автоматической генерацией файла конфигурации, если он не существует. Но поиск внешнего файла конфигурации все еще будет более обременительным для пользователей, которые просто хотят скачать сценарий, отредактировать его и покончить с этим.
Кроме того, несколько опций относительно того, как конфигурация должна управляться пользователем после установки:
Git, как
$ myscript config server.host example.org $ myscript config server.proxypath / home / johndoe / proxy $ myscript config server.httppath / home / johndoe / webИнтерактивная
$ myscript config
Введите имя хоста сервера: example.org
Введите путь к прокси на сервере: / home / johndoe / proxy
Введите путь к каталогу http на сервере: / home / johndoe / webgetopts с длинными параметрами
$ myscript --host example.org --proxypath / home / johndoe / proxy --httppath / home / johndoe / webПростой
$ myscript config example.org / home / johndoe / proxy / home / johndoe / web
Есть ли другие способы сделать это, что вы бы рассмотреть?
Любые лучшие практики, что-нибудь элегантное?
источник
Ответы:
Что бы я ожидал от вменяемой программы (сценарий оболочки или нет):
источник
mount
илиssh
разрешить вам использовать один и тот же синтаксис в командной строке и в конфигурации. Вам не нужно полностью копировать синтаксис командной строки; вместо '--foo = bar' вы можете использовать 'foo = bar'. Если бы вместо этого вы использовали BarOption: Foo, это было бы гораздо менее удобно: необходимость помнить, если регистр значим, какое ключевое слово принимается в файле, а какое в командной строке, и невозможность скопировать-вставить рабочую команду строка в конфигурационный файл только с косметическим редактированием.Когда мне нужно написать сложный скрипт с различными вариантами конфигурации, я использую Python с библиотеками argparse и ConfigParser . Они помогают с реализацией, но процесс применим к любому сценарию оболочки:
Я предпочитаю, чтобы файл конфигурации содержал предпочтительные параметры, когда сценарий будет использоваться повторно, но пусть любые аргументы командной строки переопределяются. Запишите файл конфигурации, используя эти параметры при первом запуске. Конфигурационный файл затем может быть передан и передан в хранилище кода.
В моем последнем случае я также записал значения по умолчанию в
[DEFAULT]
раздел в верхней части файла конфигурации, а затем имел раздел для каждой «среды» с соответствующими переопределениями для каждого. «Среда» является первым безымянным параметром в сценарии. Таким образом, в этом случае параметры выбираются как встроенные параметры по умолчанию -> файл конфигурации по умолчанию -> значение раздела файла конфигурации -> параметр командной строки . Дополнительный параметр командной строки дает возможность перезаписать существующую конфигурацию значением последнего запуска. Этот файл конфигурации записывается в текущий каталог, поэтому он применяется для каждого проекта и может быть зафиксирован с остальной частью кода. Любой другой, проверяющий тот же проект, будет начинать с той же конфигурации.источник
default.config
файле, расположенном в том же каталоге, что и скрипт, а затем поискать файл конфигурации~/.scriptname
для переопределения этих значений. Таким образом, каждое значение имеет допустимое значение по умолчанию, и его легче поддерживать.Редактирование заполнителей подвержено ошибкам.
Я бы пошел с использованием файла конфигурации.
Ваше беспокойство по поводу зависимости справедливо, однако я не помню, чтобы использовалось слишком много инструментов, состоящих из одного файла. Так что теоретически вы правы, но практически все должно быть вполне нормально.
Третий вариант , чтобы сделать программное обеспечение конфигурации написать новую подогнанную версию, которая специфична для выбранных опций и параметров. Это может быть сложнее написать и проверить, конечно :)
источник