在执行 cat 和 grep 时,如何将值视为值而不将其视为字符串

在执行 cat 和 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

如何不将 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"

相关内容