【问题标题】:How to create and access a shell config file from a shell script? [duplicate]如何从 shell 脚本创建和访问 shell 配置文件? [复制]
【发布时间】:2013-04-28 06:10:38
【问题描述】:

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

【问题讨论】:

    标签: bash file shell config


    【解决方案1】:

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

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

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

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

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

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

    注意事项

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

    【讨论】:

      【解决方案2】:

      您可以使用如下代码:

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

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

      Foo
      Bar
      

      【讨论】:

        【解决方案3】:

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

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

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

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

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

        所以,你应该

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

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

        下一次,使用谷歌或 SO 的搜索来获得答案在此处提问之前

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

        【讨论】:

        • 我确实在这些主题上寻求帮助,并且实际上阅读了许多其他有关此问题的问题,但是,我没有找到任何解释得足够好或对我的问题有特别帮助的东西。抱歉,如果我因为想要更具体的答案而让您生气,并感谢您提供的信息。
        猜你喜欢
        • 2018-05-19
        • 1970-01-01
        • 2015-11-16
        • 1970-01-01
        • 2011-08-24
        • 1970-01-01
        • 1970-01-01
        • 2023-04-05
        • 1970-01-01
        相关资源
        最近更新 更多