Próbowałem napisać prosty skrypt bash, którego użyję do zainstalowania aplikacji i zaktualizowania jej pliku konfiguracyjnego. Mam trudności z modyfikacją pliku konfiguracyjnego.
# DBHost=localhost
DBName=test
# DBPassword=
jakieś sugestie, w jaki sposób mogę uzyskać powyżej zmodyfikowane, jak poniżej?
DBHost=localhost
DBName=database
DBPassword=password
bash
shell-script
text-processing
configuration
compixtr
źródło
źródło
Odpowiedzi:
Najlepszy sposób zależy od tego, czy spodziewasz się, że plik zostanie również zmodyfikowany przez ludzi, jak skomplikowany jest plik i czy chcesz, aby twój skrypt miał pierwszeństwo, jeśli wygląda na to, że ktoś inny chce innej wartości. To znaczy, jeśli plik już zawiera
DBPassword=swordfish
, czy chcesz to zachować, czy zastąpićDBPassword=password
?Częstym sposobem radzenia sobie z tym jest oddzielenie części pliku „magicznymi komentarzami” i edytowanie tylko części między tymi komentarzami. Oto sposób na zrobienie tego za pomocą awk. Jeśli magiczne komentarze nie są obecne, nowa sekcja jest dodawana na końcu pliku. Ostrzeżenie: nieprzetestowany kod.
To podejście nie działa dobrze, jeśli program odczytujący plik konfiguracyjny nie obsługuje wielu wierszy ustawiających ten sam element konfiguracji. W takim przypadku naprawdę musisz usunąć stare. W takim przypadku radzę pozostawić komentarze nietknięte i dodać własne ustawienia na końcu.
źródło
Jeśli to wszystko, czego potrzebujesz, możesz zrobić coś takiego
Spowoduje to skopiowanie oryginału
config.file
doconfig.file.bak
i dokonać niezbędnych zmian.źródło
Pójdę z „ex” w trybie cichym:
Komenda terdona
sed
jest zwarta i wydajna. Ale interakcja „dokumentu tutaj” pełnego poleceń ex i interpolacji ciągów powłoki może być potężna. Na przykład hasło można zastąpić wartością zmiennej powłoki:Jeśli używasz
vi
lubvim
znasz tryb „:”, dodawanie nowych / lepszych / różnych edycji jest również dość łatwe.źródło