在 bash 中读取配置文件的最佳方式

Icy*_*Ice 46 bash

在 bash 中读取配置文件的最佳方法是什么?
例如,您有一个脚本并且不愿意在每次调用该脚本时手动填写所有配置。

编辑1:我想我没有说清楚,所以:我想要的是......我有一个配置文件,就像

variable_name value  
variable_name value ...  
Run Code Online (Sandbox Code Playgroud)

我想读那个。我知道我可以为我正在寻找的参数grep它……但也许有更聪明的方法:)

mur*_*uru 70

正如 mbiber 所说,source另一个文件。例如,您的配置文件(例如some.config)将是:

var1=val1
var2=val2
Run Code Online (Sandbox Code Playgroud)

您的脚本可能如下所示:

#! /bin/bash

# Optionally, set default values
# var1="default value for var1"
# var1="default value for var2"

. /path/to/some.config

echo "$var1" "$var2"
Run Code Online (Sandbox Code Playgroud)

中的许多文件/etc/default通常以类似的方式用作其他 shell 脚本的配置文件。此处帖子中一个非常常见的示例是/etc/default/grub. 该文件用于设置 GRUB 的配置选项,因为它grub-mkconfig是一个来源它的 shell 脚本:

sysconfdir="/etc"
#…
if test -f ${sysconfdir}/default/grub ; then
  . ${sysconfdir}/default/grub
fi
Run Code Online (Sandbox Code Playgroud)

如果您确实必须处理表单的配置:

var1 some value 1
var2 some value 2
Run Code Online (Sandbox Code Playgroud)

然后你可以做这样的事情:

while read var value
do
    export "$var"="$value"
done < /path/to/some.config
Run Code Online (Sandbox Code Playgroud)

(你也可以做类似的事情eval "$var=$value",但这比获取脚本风险更大。你可能会比源文件更容易无意中破坏它。)

  • @IcyIcyIce 只是不要。为什么不能从一开始就用“=”来写呢? (2认同)

小智 8

使用source.加载文件。

source /path/to/file
Run Code Online (Sandbox Code Playgroud)

或者

. /path/to/file
Run Code Online (Sandbox Code Playgroud)

还建议在加载之前检查文件是否存在,因为如果配置文件不存在,您不想继续运行脚本。