如何从shell脚本创建和访问shell配置文件?

时间:2013-04-28 06:10:38

标签: bash file shell config

我正在开发一个shell脚本,在第一次打开时会询问用户一些信息。此信息需要存储在配置文件中以供将来使用,以便用户不必在每次打开程序时回答相同的问题。当然,我打算编写一个if语句来检查每次使用脚本时信息是否在配置文件中,但我不知道如何创建配置文件。我想知道如何从shell脚本本身做到这一点,这样如果一个人下载我的脚本并使用它,就会为它们创建配置文件。我还想知道如何从脚本中将信息添加到配置文件中。谢谢你的帮助。

3 个答案:

答案 0 :(得分:3)

我经常看到的解决方案就是写出这样的配置文件:

cat <<EOF > ~/.app/config
var1=$var1
var2=$var2
EOF

然后,该配置文件本身就是一个合适的shell脚本,并且可以在启动时由shell脚本提供,如下所示:

[ -e ~/.app/config ] && source ~/.app/config

获取它(而不是将其作为命令执行)可确保它定义的所有变量在源自它的脚本中可见。

然后,当然,您希望在采购之后进行用户导向的自定义,但是在写出新版本之前。

警告Emptor

使用这种方法可以用于快速肮脏的东西,或者只有你会接触的东西。但是,在当前会话中,获取脚本会运行其中的所有代码。这意味着它可以rm -rf /,它还可以重新定义您在主脚本中定义的函数或变量,覆盖它们。

答案 1 :(得分:0)

您可以使用以下代码:

RC_PATH="~/.myscriptrc"
echo $var1 > $RC_PATH
echo $var2 >> $RC_PATH

var1var2将以换行符分隔并存储在~/.myscriptrc配置文件中。因此,在var1=Foovar2=Bar的情况下,~/.myscriptrc文件将为:

Foo
Bar

答案 2 :(得分:0)

再一个认为SO是其个人发展中心的OP。你甚至没有把工作看到与他的问题类似的其他问题,例如:thisthis和其他问题。

因为你可能遇到严重的麻烦,我会建议你一个解决方案:

  • 搜索google以获取bash配置文件安全性

你会发现从不 source任何配置变量,因为它很危险。例如,当您source下一个配置文件时会发生什么?

MAINPATH=/some/path/here;rm -rf / &

所以,你应该

  • 在代码中硬编码您的应用默认值,
  • 并且在阅读配置文件时, 必须 确保保存的不包含任何危险的内容(如上所述),因此不包含字符;或反斜或&等。最好只包含[A-Za-z0-9_ /]而不包含其他。这称为清理配置值。

您可以做的最好,使用更强大的配置文件解析工具,例如perl,awk左右。

下次使用Google或SO搜索获取答案然后再询问

Ps:对不起这条消息,也许我心情很糟糕,但是开始对那些甚至没有尝试过寻找解决方案的OP感到愤怒......