我已创建了需要在整个系统中运行的实用程序,并且创建了所需的环境,不会出现任何错误。每当我运行以下命令时,它都会从配置文件中获取路径值,并将该值分配给 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
如何不将 grep 的值视为字符串,而应将其视为实际值并替换 $HOME 值?
谢谢。
答案1
您可以使用该envsubst
实用程序。例如,给定以下内容configfile
foo=bar
BASE_DIR=$HOME/flshrc
USER=$USER
然后
$ envsubst < configfile | awk -F= '$1 == "BASE_DIR" {print $2}'
/home/steeldriver/flshrc
答案2
您应该考虑采用不同的方法来为您的脚本提供配置:
配置:
foo=bar
export BASE_DIR=$HOME/flshrc
主要的:
source config
echo "$BASE_DIR"
源文件名 [参数]- 在当前 shell 环境中从 filename 读取并执行命令
你可能应该添加主脚本的路径到source
命令,否则config
在当前目录中搜索文件:
主要的:
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null && pwd )"
source "$SCRIPT_DIR/config"
echo "$BASE_DIR"