我正在开发一个bash提示项目,它对你当前所在目录中的不同状态起作用。
我现在需要的是一种从当前目录加载迷你配置的方法,这可以通过. .params.conf
轻松完成,但这种方法非常不安全,因为任何对您所在目录具有写访问权限的人都可以当您偶然发现一个包含.params.conf文件的目录时,可以创建并执行命令。
从这样的文件加载变量的最佳方法是什么? 变量大部分都处于真/假状态,因此我不会以任何方式解析它们,因此可以执行。
可能的解决方案:
循环,加载每个预定义变量是可能的,但我希望以可读的方式保持代码。
将整个文件放在bash数组中是最好的解决方案,但是如何在bash中填充键/值dict?
如果bash可以只提供加载变量的文件..
我不知道params.conf文件的格式是怎么样的。但我认为最容易的是每个参数的一行,用空格分隔。就像每行上的其中一个:key value that can have space in it
。
答案 0 :(得分:3)
eval
可以是very insecure,但仍然可以执行恶意代码。最好使用declare
:
while read varname value
do
declare "$varname=$value"
done < .params.conf
答案 1 :(得分:0)
如果您的值不包含引号,则相当容易:
while read varname value ; do
eval $varname="'$value'"
done < .params.conf
如果变量中有引号,则必须更加小心并添加一些转义。