我正在开发一个shell脚本,在第一次打开时会询问用户一些信息。此信息需要存储在配置文件中以供将来使用,以便用户不必在每次打开程序时回答相同的问题。当然,我打算编写一个if语句来检查每次使用脚本时信息是否在配置文件中,但我不知道如何创建配置文件。我想知道如何从shell脚本本身做到这一点,这样如果一个人下载我的脚本并使用它,就会为它们创建配置文件。我还想知道如何从脚本中将信息添加到配置文件中。谢谢你的帮助。
答案 0 :(得分:3)
我经常看到的解决方案就是写出这样的配置文件:
cat <<EOF > ~/.app/config
var1=$var1
var2=$var2
EOF
然后,该配置文件本身就是一个合适的shell脚本,并且可以在启动时由shell脚本提供,如下所示:
[ -e ~/.app/config ] && source ~/.app/config
获取它(而不是将其作为命令执行)可确保它定义的所有变量在源自它的脚本中可见。
然后,当然,您希望在采购之后进行用户导向的自定义,但是在写出新版本之前。
使用这种方法可以用于快速肮脏的东西,或者只有你会接触的东西。但是,在当前会话中,获取脚本会运行其中的所有代码。这意味着它可以rm -rf /
,它还可以重新定义您在主脚本中定义的函数或变量,覆盖它们。
答案 1 :(得分:0)
您可以使用以下代码:
RC_PATH="~/.myscriptrc"
echo $var1 > $RC_PATH
echo $var2 >> $RC_PATH
var1
和var2
将以换行符分隔并存储在~/.myscriptrc
配置文件中。因此,在var1=Foo
和var2=Bar
的情况下,~/.myscriptrc
文件将为:
Foo
Bar
答案 2 :(得分:0)
再一个认为SO是其个人发展中心的OP。你甚至没有把工作看到与他的问题类似的其他问题,例如:this或this和其他问题。
因为你可能遇到严重的麻烦,我会建议你一个解决方案:
你会发现从不 source
任何配置变量,因为它很危险。例如,当您source
下一个配置文件时会发生什么?
MAINPATH=/some/path/here;rm -rf / &
所以,你应该
;
或反斜或&
等。最好只包含[A-Za-z0-9_ /]而不包含其他。这称为清理配置值。您可以做的最好,使用更强大的配置文件解析工具,例如perl,awk左右。
下次使用Google或SO搜索获取答案然后再询问
Ps:对不起这条消息,也许我心情很糟糕,但是开始对那些甚至没有尝试过寻找解决方案的OP感到愤怒......