Настройка конфигурационных файлов в bash - PullRequest
0 голосов
/ 23 марта 2020

Моя проблема заключается в следующем:

  • Я направляю вывод оператора печати в файл конфигурации.
  • Когда выполняется оператор print, он возвращает несколько элементов. Когда элементы выводятся в конфигурацию
  • , я хочу назначить имя переменной каждому, чтобы я мог использовать их позже.
  • Я хочу, чтобы назначение было основано на переменных, использованных в исходном операторе печати. ​​

Например, скажем, у меня есть 4 категории животных: кошка, собака, лошадь и мышь , Если печатаемые элементы соответствуют переменной cat (используемой в операторе print), то я хочу, чтобы этим элементам были присвоены имена переменных cat1, cat2, et c. Это так, чтобы я мог различать различные типы переменных и эффективно использовать их позже.

Примечание: я планирую заполнять конфиг только одной из этих 4 категорий за раз, а затем каждый раз, когда выполняется оператор print, я перезаписываю содержимое файла конфигурации.

Таким образом, мой файл конфигурации будет выглядеть следующим образом до назначения (после выполнения оператора print) ..

   whitecat
   blackcat

#or like this

   brownhorse
   greyhorse

И я хочу, чтобы он был похож на это после назначения ..

   cat1="whitecat" 
   cat2="blackcat"

#or like this

   horse1="brownhorse"
   horse2="greyhorse"

Здесь в качестве примера того, что я хочу сделать ..

Оператор print обращается к каталогу, используя путь ${MAINPATH}/${SUBPATH}, где MAINPATH определяется как /home/jt8146 и SUBPATH определяется как кошка, собака, лошадь или мышь. Он берет из SUBPATH информацию, относящуюся к этому животному. то есть, если SUBPATH определен как cat, он будет вводить в файл конфигурации информацию, такую ​​как whitecat и blackcat

, поэтому полный путь будет выглядеть как /home/jt8146/cat

Один раз эта информация была выведена в файл конфигурации. Я хочу, чтобы информация whitecat и blackcat была назначена переменной. Но вместо того, чтобы вводить go в конфигурационный файл и вводить назначение, я хочу, чтобы оно выполнялось автоматически после получения информации. получает вывод в файл конфигурации.

Так что я подумал, что сделаю функцию, которая включает оператор if, elif, т.е. if SUBPATH = cat then do assignment cat1, cat2 to each element in the config file

Если файл конфигурации выглядит следующим образом, если оператор выполняется

whitecat
blackcat
yellowcat
greencat

тогда whitecat будет присвоено переменной cat1, blackcat - переменной cat2 и т. Д.

Оператор print является встроенной командой из другого приложения, которое я использую, и оно получает информацию по указанному пути. Оператор print работает, и информация находится в файле конфигурации, но не назначена, и мне нужна помощь.

Мои вопросы:

1) Как вы назначаете переменные к содержанию конфига, как только он уже был заполнен?

2) Есть ли похожий вопрос о переполнении стека, который кто-то может указать мне на тот ответ на мой вопрос выше, который мне не удалось найти?

Ответы [ 2 ]

0 голосов
/ 23 марта 2020

Полагаю, первый указанный вами файл называется config, а категория (cat, horse, et c ...) содержится в переменной $category. В нашем примере значение $category равно cat.

Сначала вам нужно будет создать файл, скажем, "$category.config", содержащий v.gr.

cat1="whitecat" 
cat2="blackcat"

Do это следующим образом:

awk -v category="$category" '{print category""NR"=\""$0"\""}' config > "$category.config"

Теперь вы хотите, чтобы переменные, определенные в "$category.config", были доступны для текущего скрипта, вам нужно source этот файл. Это возможно с помощью оператора . "$category.config", что означает, что содержимое $category.config должно быть получено в текущем скрипте в текущей точке.

Демо:

echo before sourcing: cat1 = $cat1
. cat.config
echo after sourcing: cat1 = $cat1

приведет к следующий вывод:

before sourcing: cat1 = 
after sourcing: cat1 = whitecat

Вместо . cat.config я мог бы выдать . "$category.config".

0 голосов
/ 23 марта 2020

IIU C, у вас есть файл с именем config, который выглядит следующим образом:

cat1="whitecat"
cat2="blackcat"

Теперь вы хотите иметь переменные cat1 и cat2, которые имеют whitecat и blackcat значений соответственно. Вы можете сделать это, используя файл конфигурации:

$ . config
$ echo $cat1
whitecat
$ echo $cat2
blackcat

(Обратите внимание, что $ - это приглашение командной строки , используемое для указания начала новой строки, а не части команда).

. как команда в Bash и других оболочках, которые запрашивают , что означает чтение файла, заданного в качестве аргумента, и выполнение каждой строки в нем как команда оболочки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...