2012-03-04 4 views
4

У меня есть файл конфигурации Linux с с форматом, как это:Как получить значение переменной config в bash?

VARIABLE=5753 
VARIABLE2="" 
.... 

Как бы я получить F.E. значение VARIABLE2 с использованием стандартных инструментов linux или регулярных выражений? (Мне нужно разобрать путь к каталогу из файла). Заранее спасибо.

+0

Возможно, я этого не понимаю, но почему бы вам не написать 'echo $ VARIABLE2'? –

+2

Вы не хотите, чтобы источник был весь файл? – Mat

+0

Прошло почти 3 года, поэтому я даже не помню, но я думаю, что пошел за правильным ответом. Поиск всей конфигурации не был вариантом, я не собирался выполнять "." на потенциально ненадежной/поврежденной конфигурации, поэтому я пошел на соответствие требованиям регулярного выражения perl, а затем отфильтровал результаты с помощью дополнительных регулярных сообщений (в моем скрипте было необязательное имя для tmpdir в переменной, и я не хотел, чтобы это было «~» или «/», которое приведет к «rm -r» после этого. – AoeAoe

ответ

4
$> cat ./text 
VARIABLE=5753 
VARIABLE2="" 

С perl регулярным выражением grep может соответствовать эти значения с помощью оператора с просмотром назад.

$> grep --only-matching --perl-regex "(?<=VARIABLE2\=).*" ./text 
"" 

И VARIABLE:

$> grep --only-matching --perl-regex "(?<=VARIABLE\=).*" ./text 
5753 
+0

отлично работает, спасибо – AoeAoe

5
eval $(grep "^VARIABLE=" configfile) 

выберет линию и оценит ее в текущем контексте bash, установив значение переменной. После этого у вас будет переменная с именем VARIABLE со значением 5753. Если такой строки не существует в конфигурационном файле, ничего не происходит.

4

Вы можете использовать команду source (ака .), чтобы загрузить все переменные в файле в текущей оболочке:

$ source myfile.config 

сейчас у вас есть доступ к значениям переменных, определенных внутри файла:

$ echo $VARIABLE 
5753 
Смежные вопросы