Я хочу вызвать файл настроек для переменной, как я могу это сделать в bash?
Таким образом, файл настроек будет определять переменные (например: CONFIG.FILE):
production="liveschool_joe"
playschool="playschool_joe"
И скрипт будет использовать эти переменные в нем
#!/bin/bash
production="/REFERENCE/TO/CONFIG.FILE"
playschool="/REFERENCE/TO/CONFIG.FILE"
sudo -u wwwrun svn up /srv/www/htdocs/$production
sudo -u wwwrun svn up /srv/www/htdocs/$playschool
Как я могу заставить bash сделать что-то подобное? Должен ли я использовать awk / sed и т. Д.?
источник
source
, передавая содержимое, а не предоставляя файл? Вродеsome command | source
не работает ...declare -p
), какsomeArray[3]="abc"
и так далее ...еще короче используя точку:
источник
source
команду, чтобы прояснить ситуацию?Используйте
source
команду для импорта других скриптов:источник
У меня такая же проблема, особенно в плане безопасности, и я нашел решение здесь .
Моя проблема заключалась в том, что я хотел написать сценарий развертывания на bash с файлом конфигурации, который содержал бы такой путь, как этот.
Существующее решение состоит из использования команды «SOURCE» и импорта файла конфигурации с этими переменными. 'SOURCE путь / к / файлу' Но у этого решения есть некоторая проблема безопасности, потому что исходный файл может содержать все, что может сценарий Bash. Это создает проблемы безопасности. Специалист по malicicios может «выполнить» произвольный код, когда ваш скрипт использует свой конфигурационный файл.
Представьте себе что-то вроде этого:
Чтобы решить эту проблему, мы можем захотеть разрешить только конструкции в форме
NAME=VALUE
в этом файле (синтаксис присваивания переменных) и, возможно, комментарии (хотя технически комментарии не важны). Итак, мы можем проверить файл конфигурации с помощьюegrep
команды, эквивалентнойgrep -E
.Вот как я должен решить проблему.
источник
CMD="$(rm -fr ~/*)"
.(
и `` `финалCONFIG_SYNTAX="(^\s*#|^\s*$|^\s*[a-z_][^[:space:]]*=[^;&\(`]*$)"
foo=bar unleash_virus
может быть выполнен Обратите вниманиеfoo=bar\ unleash_virus
,foo="bar unleash_virus"
иfoo=bar #unleash_virus
в безопасности. Нелегко правильно дезинфицировать и не блокировать какой-то безобидный синтаксис, особенно когда вы думаете о всевозможных цитировании и экранировании.в Bash, чтобы получить вывод какой-то команды вместо файла:
ссылка
источник
Преобразование файла параметров в переменные окружения
Обычно я занимаюсь разбором вместо поиска, чтобы избежать сложностей определенных артефактов в моем файле. Он также предлагает мне способы специально обрабатывать цитаты и другие вещи. Моя главная цель - сохранить все, что следует после «=» в качестве литерала, даже двойные кавычки и пробелы.
Обратите внимание на небольшую хитрость, которую я должен был сделать, чтобы рассмотреть мой цитируемый текст как один параметр с пробелом в моей
cntpars
функции. Был один дополнительный уровень оценки требуется. Если бы я не сделал этого, как в варианте 2, я бы передал 2 параметра следующим образом:"value
content"
Двойные кавычки во время выполнения команды приводят к сохранению двойных кавычек из файла параметров. Следовательно, 3-й вариант также не работает.
Другой вариант, разумеется, состоит в том, чтобы просто не указывать переменные в двойных кавычках, как в варианте 4, а затем просто убедиться, что вы их цитируете при необходимости.
Просто что-то иметь в виду.
Поиск в реальном времени
Еще мне нравится делать поиск в реальном времени, избегая использования переменных окружения:
Не самый эффективный, но с небольшими файлами работает очень чисто.
источник
Если переменные генерируются и не сохраняются в файл, вы не можете передать их в
source
. Обманчиво простой способ сделать это так:источник
Сценарий, содержащий переменные, может быть выполнен импортированным с использованием bash. Рассмотрим скрипт-variable.sh
Рассмотрим реальный скрипт, в котором будет использоваться переменная:
источник
src-var
не является действительным идентификатором.Для предотвращения конфликтов имен импортируйте только те переменные, которые вам нужны:
источник