2

Linuxコンピューターで実行されるスクリプト「m12」(私はこの名前を発明したばかりです)があると想像してみてください。$ PATHにある場合は、次のようにコンソールから簡単に実行できます。

m12 

デフォルトのパラメータで動作します。ただし、次のように実行することで、このスクリプトの作業をカスタマイズできます。

m12 --enable_feature --select=3

それは素晴らしいです、そしてそれはうまくいくでしょう。ただし、構成ファイルを作成したいので、実行するたび~/.m12rcに指定する必要はありません。--enable_feature --select=3簡単にできます。

難しい部分はここから始まります。

だから、私は設定ファイルを持っていますが、その設定ファイルに保存されているパラメータなし~/.m12rcで何を始めるべきか。m12これを行うためのUnixの方法は何ですか?次のようなスクリプトを実行する必要があります。

m12 --ignore_config

またはより良い解決策がありますか?

次。構成ファイルが~/.m12rcあり、そのファイルからいくつかのパラメーターが必要であるが、それらを少し変更したいとします。スクリプトをどのように実行し、スクリプトをどのように機能させる必要がありますか?

そして最後の質問。.m12rc スクリプトが最初に現在のディレクトリを検索し、次に~/検索してから検索するのは良い考え/etcですか?

小さなスクリプトに構成ファイルを実装する方法と、設計について正しい決定を下したいので、これらすべての質問をして います。

4

2 に答える 2

4

ESレイモンドの著書「TheArtofUnix Programming」では、このような問題について説明しています。

設定ファイルは。で上書きできます--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。他のオプションが必要な場合は、必要なオプションを使用してrawを実行m12します。個人のbinディレクトリに数百のファイルがあります(メインマシンであるMacでは約500、それらの一部は実行可能ファイルですが、多くはスクリプトです)。

于 2012-07-11T16:40:13.673 に答える
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」セクションをスクリプトに移動し、それが構成ファイルをソースした後(ソーシングをスキップするスイッチがなかった場合)。

スクリプト構成ファイルをetcに配置しないでください。これを行うには、root特権が必要になります。また、構成ファイルを自宅に置いて簡単に使用できます。とにかく他のユーザーと共有するためにスクリプトを配置したい場合は、/ usr /share...に移動する必要があります。

別の解決策は、thor(ruby gem)を使用します。これは、入力パラメーターの処理が簡単で、bashで同じ結果を得る作業を回避します。たとえば、getoptsは1文字のスイッチのみをサポートします。

于 2012-07-11T16:10:25.193 に答える