May. 1st, 2009

esyr: (Default)
Во время написания очередного скипта у меня таки зачесалось и я решил вынести конфиг к нему отдельный файл. Естественно мне, как человеку ленивому, западло парсить текстовый файл (все парсеры у меня обычно на регекспах и исключительно монструозны, так что это было бы похлеще забивания гвоздей телескопом), посему логично было конфиг писать также на шелле (к тому же, это даёт пачку плюшек в виде прописывания substitusion-expansion-etc для значений параметров). Осталась одна проблема: как исполнить конфигурационный скрипт в текущем контексте? Просто выполнение вызывает субшелл, и, естественно, все изменения в нём никак не отражаются на текущем окружении. Первая идея с использованием бэктиков (<cat config<) потерпела провал: шелл считает, что после разворачивания должны быть команды; а это не так. Курение мана и попытка использовать фигурные скобки привела к тому же результату. Как оказалось, решение проще простого — существует встроенная команда eval, которая делает ровно то, что нужно, а именно, выполняет передаваемые ей параметры в текущем контексте. Результат выглядит следующим образом:
if [[ -f "$config_file" ]]
then
    eval $(cat "$config_file")
fi

Дискасс, у меня есть подозрение, что это — очередное поделие, и всё продвинутое человечество давным-давно пользуется гораздо более лаконичными и технологичными методами.

Update. Таки да, поделие. Прогрессивное человечество пользуется командой source или .. Спасибо [livejournal.com profile] _winnie и [livejournal.com profile] v_for_vandal.

Profile

esyr: (Default)
esyr

October 2010

S M T W T F S
     12
3456789
10111213141516
17181920212223
24252627282930
31      

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Apr. 6th, 2026 06:40 pm
Powered by Dreamwidth Studios