シェルスクリプトから使える config ファイルの作り方

投稿者: Anonymous

command -p1 <param1> -p2 <param2> ...

みたいなコマンドをデーモンでいくつか動かしたいのですが
パラメータを1つの設定ファイルで管理する方法はないでしょうか?

今は

#!/bin/bash
PARAM1=abc
PARAM2=123
command -p1 $PARAM1 -p2 $PARAM2

みたいなスクリプトをいくつも用意してるのですが
パラメータを変更する際全部のファイルに変更が必要なので1ファイルに集約したいです

例えば config.ini

[option1]
PARAM1: abc
PARAM2: 123

[option2]
PARAM1: def
PARAM2: 456

みたいな設定ファイルと

start.sh

#!/bin/bash
# config.ini のラベル $1 を読み込み
command -p1 $PARAM1 -p2 $PARAM2

という共通の実行ファイルだけ用意して
bash start.sh option1
bash start.sh option2
みたいにラベル名だけ渡してパラメータを変えられるようにしたいです

設定ファイルのフォーマットは ini でも yaml でも2次元 hash を扱えれば何でもいいです

とりあえず設定ファイルを json にして
jq で .$1.PARAM1 .$1.PARAM2
みたいに取得することを考えてますが json ってコメントアウトができないので
もっと定番の方法があったら教えて欲しいです

解決

bashですよね。シンプルに source に引数を渡したらどうでしょうか。

start.sh

#!/bin/bash

CURRENT_DIR=$(cd "$(dirname "$0")" && pwd -P)
source "${CURRENT_DIR:?}/config.sh" "$1"

echo command -p1 "$PARAM1" -p2 "$PARAM2"

config.sh

#!/bin/bash

case $1 in
option1)
    PARAM1=abc
    PARAM2=123
    ;;
option2)
    PARAM1=def
    PARAM2=456
    ;;
esac

実行するとこんな感じ:

$ bash start.sh option1
command -p1 abc -p2 123
回答者: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *