让我们假设我们有一些脚本'm12'(我刚刚发明了这个名字) 在Linux计算机上。如果它位于$ PATH中,您可以轻松运行它 从控制台这样:
m12
它将使用默认参数。但你可以自定义工作 这个脚本的运行类似于:
m12 --enable_feature --select=3
很棒,它会起作用。但我想创建一个配置文件~/.m12rc
,所以我
每次运行时都不需要指定--enable_feature --select=3
。
它很容易完成。
困难的部分是从这里开始。
所以,我有~/.m12rc
配置文件,但是如果没有参数,我可以启动m12
存储在该配置文件中。 Unix的方法是什么?我应该跑吗
像这样的脚本:
m12 --ignore_config
还是有更好的解决方案?
下一步。我们假设我有一个配置文件~/.m12rc
,我想要一些参数
文件,但想稍微改变它们。我应该如何运行脚本以及如何运行脚本
脚本应该工作吗?
最后一个问题。脚本首先查找.m12rc
是个好主意吗
在当前目录中,然后在~/
中,然后在/etc
中?
我问所有这些问题,因为我在我的网站中实现了配置文件 small script我希望对设计做出正确的决定。
答案 0 :(得分:4)
E S Raymond的书'The Art of Unix Programming'讨论了这样的issues。
您可以使用--config-file=/dev/null
覆盖配置文件。
您通常会使用订单:
/etc/m12/m12rc
或/etc/m12
)。~/.m12rc
)./.m12rc
)每个后来列出的项目都会覆盖之前列出的项目。您应该能够在命令行中指定要读取的配置文件;可以说,这应该优先于其他选择。考虑--no-system-config
或--no-user-config
或--no-local-config
。许多脚本不保证系统配置文件。我开发的大多数脚本都不会同时使用本地配置和用户配置。但这就是我的思维方式。
我打包标准选项的方法是在$HOME/bin
(例如m12a
)中添加一个脚本来代替我:
#!/bin/sh
exec m12 --enable_feature --select=3 "$@"
如果我想要这些选项,我会运行m12a
。如果我想要一些其他选项,我使用必要的选项运行原始m12
。我的个人bin目录中有数百个文件(我的主机上有大约500个文件,一台Mac;其中一些是可执行文件,但很多是脚本)。
答案 1 :(得分:0)
让我分享一下我的经验。我通常在脚本的开头提供配置文件。在配置文件中,我还处理所有参数开关:
DEFAULT_USER=blabla
while getopts ":u" do
case $opt in
u)
export APP_USER=$OPTARG
;;
esac
done
export APP_USER=${APP_USER-$DEFAULT_USER}
然后在脚本中我只使用变量,这让我有多个具有相同输入参数的脚本。
在你成像的情况下,我会将“getopts”部分移动到脚本并在它获取配置文件之后(如果没有切换跳过采购)。
你不应该把你的脚本配置文件等等,它需要root privilidge才能做到这一点,你可以在家中使用配置文件。 如果您仍希望将脚本与其他用户共享,则应该转到/ usr / share ...
另一个解决方案是使用thor(ruby gem),它更简单地处理输入参数,避免在bash中获得相同的结果。 getopts仅支持单字母开关。