我在使用 Linux POSIX shell 脚本时遇到了一些困难(使用 ShellCheck 和 Dash shell 进行测试)。
到目前为止,我的脚本不需要任何配置文件。我在脚本的顶部使用了变量。然而,用户似乎不喜欢打开脚本并进行编辑,而是希望有一个单独的文件进行调整。
假设我们有一个名为
myScript
的脚本,并且在同一目录中我们有名为 myScript.conf
的配置文件。我可能已经让它工作了,但我对我的加载程序有一些严重的怀疑。举个例子,如果路径中有空格,它会起作用吗?另外,我真的需要这样做吗dirname "$0"
?
最小片段:
myScript.conf
:
var1=stringA
var2=stringB
myScript
:
#!/bin/sh
error()
{
printf >&2 '%s\n' "$@"
exit 1
}
script_dir=$( dirname "$0" )
config_file="$script_dir"/myScript.conf
if [ ! -f "$config_file" ]; then
error "The configuration file does not exist or it is not a regular file."
fi
if [ ! -r "$config_file" ]; then
error "The configuration file exists, but it is not readable by this script."
fi
. "$config_file"
#
# DO SOME GOOD STUFF BASED ON CONFIG VARIABLES
#
如果路径中有空格,它会工作吗
是的。使用 shellcheck 检查您的脚本。
我真的需要做目录名“$0”吗?
这取决于您想从哪里加载配置文件。如果您想从与存储脚本相同的目录加载它,那么可以。另一个助记符是
dir="$(dirname "$(readlink -f "$0")")"
也可以处理符号链接。