控制台脚本使用配置文件的Unix方式是什么?

时间:2012-07-11 15:42:05

标签: unix console

让我们假设我们有一些脚本'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我希望对设计做出正确的决定。

2 个答案:

答案 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仅支持单字母开关。