相关疑难解决方法(0)

你能找到一份“这里的文件”吗?

假设我有一个 bash 脚本,它充当另一个 bash 脚本的配置文件:

配置文件:

verbose=yes
echo "Malicious code!"
name=test
Run Code Online (Sandbox Code Playgroud)

脚本.sh:

source config.sh
echo "After sourcing: verbose='$verbose', name='$name'"
Run Code Online (Sandbox Code Playgroud)

问题是,这不是很安全,因为 config.sh 中的任何内容都会运行:

$ ./script.sh
Malicious code!
After sourcing: verbose='yes', name='test'
Run Code Online (Sandbox Code Playgroud)

为了使其更安全,我想我会 grep 分配操作并只执行这些操作。我会通过传递source一个“这里的文件”来完成:

脚本.sh:

source <<EOF
$(grep -P '^\s*\w+=' test.sh)
EOF
echo "After sourcing: verbose='$verbose', name='$name'"
Run Code Online (Sandbox Code Playgroud)

(是的,我知道正则表达式不是那么强大;它只是一个占位符。)可悲的是,源文件似乎与此处的文档不太兼容:

./script.sh: line 1: source: filename argument required
source: usage: source filename [arguments]
After sourcing: verbose='', name=''
Run Code Online (Sandbox Code Playgroud)

显然,我可以做很多事情来从文件中获取配置数据,无论如何这可能更安全。

但我仍然感到痒;我想弄清楚我尝试过的是否可行。有什么建议?

shell bash here-document

9
推荐指数
2
解决办法
3288
查看次数

标签 统计

bash ×1

here-document ×1

shell ×1