Piszę skrypt powłoki z kilkoma zmiennymi, które powinien skonfigurować użytkownik. Będzie instalator do pobierania i konfigurowania skryptu, prawdopodobnie zadając serię pytań. Skrypt ten jest skierowany do innych programistów.
Można to zrealizować na kilka sposobów:
Używaj symboli zastępczych w samym skrypcie i używaj ich
sed
do zastąpienia podczas instalacji (coś takiego: /programming/415677/how-to-replace-placeholder-in-a-text-file )Plusy: wszystkie definicje zmiennych są zawarte w skrypcie. Łatwo jest pobrać skrypt ręcznie i skonfigurować zmienne dla użytkowników, którzy wolą edytor niż instalator.
Wady: trudno jest ponownie skonfigurować zmienne za pomocą instalatora, gdy są już na miejscu. Chyba że utworzę bardziej złożone wyrażenie regularne, które byłoby podatne na błędy.
Użyj pliku konfiguracyjnego , w zasadzie innego skryptu powłoki z przypisaniami i użyj,
source
aby go dołączyć. (I prawdopodobnie umieść to w~/.scriptname
? Skrypt główny jest kopiowany/usr/local/bin
)Plusy: Łatwo jest zmienić konfigurację skryptu. Można nawet dodać do tego parametr ze skryptu głównego (prawdopodobnie działałoby to również w pierwszym rozwiązaniu, ale sama edycja skryptu nie wydaje się dobrym pomysłem)
Wady: skrypt jest teraz zależny od dwóch plików i użytkownik musi uruchomić instalator, aby plik konfiguracyjny został utworzony. Można to rozwiązać automatycznie generując plik konfiguracyjny, jeśli nie istnieje. Ale zlokalizowanie zewnętrznego pliku konfiguracyjnego nadal będzie bardziej kłopotliwe dla użytkowników, którzy chcą pobrać skrypt, edytować go i skończyć z nim.
Ponadto kilka opcji dotyczących sposobu zarządzania konfiguracją przez użytkownika po instalacji:
Git jak
$ myscript config server.host example.org $ myscript config server.proxypath / home / johndoe / proxy $ myscript config server.httppath / home / johndoe / webInteraktywna
konfiguracja $ myscript
Wpisz nazwę hosta serwera: example.org
Wprowadź ścieżkę do serwera proxy na serwerze: / home / johndoe / proxy
Wprowadź ścieżkę do katalogu http na serwerze: / home / johndoe / webgetopts z długimi opcjami
$ myscript --host example.org --proxypath / home / johndoe / proxy --httppath / home / johndoe / webProsta
konfiguracja $ myscript example.org / home / johndoe / proxy / home / johndoe / web
Czy istnieją inne sposoby na zrobienie tego, które można rozważyć?
Jakieś najlepsze praktyki, coś eleganckiego?