Mam jeden plik właściwości key-> value (my.prop) z taką treścią:
ROOT_PATH = /opt/user1/
REL_PATH = data/folder1/
CONF_FILENAME = my.conf
W moim skrypcie bash po prostu czytam ten plik, tak jak poniżej:
#!/bin/bash
PROP_FILE="my.prop"
ROOT_PATH =""
REL_PATH=""
CONF_FILENAME=""
while read -r key eq value; do
case $key in
"ROOT_PATH")
ROOT_PATH=${value}
;;
case $key in
"REL_PATH")
REL_PATH=${value}
;;
case $key in
"CONF_FILENAME")
CONF_FILENAME=${value}
;;
esac
done < $PROP_FILE
Potem chciałbym stworzyć ścieżkę do my.conf plik i przeczytaj jego zawartość do jakiejś zmiennej, takiej jak ta:
CONF_FULL_PATH=$ROOT_PATH$REL_PATH$CONF_FILENAME
CONF_FILE_CONTENT=`cat ${CONF_FULL_PATH}`
Jeśli wydrukuję CONF_FULL_PATH
zmienna będzie zawierała trochę śmieci (części wszystkich trzech ścieżek podrzędnych). I na tej liniiCONF_FILE_CONTENT=`cat ${CONF_FULL_PATH}`
Otrzymam ten komunikat o błędzie - : Brak takiego pliku lub reżyserii / folderu1 /
Tak więc moje pytanie brzmi: jak mogę właściwie utworzyć ścieżkę do my.conf plik i umieścić jego zawartość w określonej zmiennej? Próbowałem już source
polecenie jako zamiennik pętli while. Również do zbudowania odpowiedniego ciągu ścieżek użyłem tych instrukcji:
$(dirname $ROOT_PATH)/$(dirname REL_PATH)/$(basename $CONF_FILENAME)
ale z mojego punktu widzenia wygląda to dziwnie.
Każda pomoc będzie świetna!
Odpowiedzi:
1 dla odpowiedzi № 1Jeśli usuniesz spacje ze swojego my.prop
możesz użyć source
(lub .
) odczytać zmienne znajdujące się w nim. To znacznie ułatwi.
my.prop:
ROOT_PATH=/opt/user1/
REL_PATH=data/folder1/
CONF_FILENAME=my.conf
Następnie możesz użyć ich bezpośrednio w swoim skrypcie:
#!/bin/bash
. my.prop
CONF_FULL_PATH="${ROOT_PATH}${REL_PATH}${CONF_FILENAME}"
CONF_FILE_CONTENT=$(cat "$CONF_FULL_PATH")