Как принять значение как значение, не рассматривая это как строку, когда мы делаем кошку и grep

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

export BASE_DIR=`cat <config file path> | grep BASE_DIR | head -1 | cut -d = -f 2`

Следующее является содержанием файла конфигурации:

BASE_DIR=$HOME/flshrc

когда я выполняю первый код, он принимает значение как $HOME/flshrc вместо фактического домашнего пути, например /home/user1/flshrc

Как не рассмотреть захваченное значение как строку и должен быть рассмотрен как фактическое значение и заменить значением $HOME?

Спасибо.

1
задан 15 October 2018 в 14:49

2 ответа

Можно использовать envsubst утилита. Например, учитывая следующее configfile

foo=bar
BASE_DIR=$HOME/flshrc
USER=$USER

затем

$ envsubst < configfile | awk -F= '$1 == "BASE_DIR" {print $2}'
/home/steeldriver/flshrc
2
ответ дан 3 December 2019 в 07:22

Необходимо полагать, что другой метод предоставляет конфигурацию сценарию:

конфигурация:

foo=bar
export BASE_DIR=$HOME/flshrc

основной:

source config
echo "$BASE_DIR"

исходное имя файла [аргументы] - Чтение и выполняет команды от имени файла в текущей среде оболочки


Вероятно, необходимо добавить путь к основному сценарию к source команда, иначе config файл разыскивается в текущем каталоге:

основной:

SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null && pwd )"
source "$SCRIPT_DIR/config"
echo "$BASE_DIR"
1
ответ дан 3 December 2019 в 07:22

Другие вопросы по тегам:

Похожие вопросы: