2

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

4

3 回答 3

3

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

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

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

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

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

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

买者自负

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

于 2013-04-28T06:57:20.790 回答
0

您可以使用如下代码:

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

var1并将var2由换行符分隔并存储在~/.myscriptrc配置文件中。因此,给定var1=Foovar2=Bar~/.myscriptrc文件将是:

Foo
Bar
于 2013-04-28T06:23:14.280 回答
0

又是一个认为 SO 是其个人发展中心的 OP。你甚至没有看其他与他类似的问题,比如:这个这个等等。

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

  • 在 google 上搜索 bash 配置文件安全性

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

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

所以,你应该

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

最好的办法是使用更强大的配置文件解析工具,例如 perl、awk 等。

下一次,在这里提问之前使用谷歌或 SO 的搜索来获取答案

Ps:很抱歉这个消息,也许我是在心情不好的时候醒来的,但是开始对那些甚至没有尝试自己找到解决方案的 OP 生气......

于 2013-04-28T08:16:11.500 回答