過去スクリプトの使い方 1

随時続きを書く。同じ名前でタイトル番号を変える。

prov.sh

prov.shでターゲットディレクトリにコピーされるスクリプト

run.sh

ターゲットディレクトリにコピーされたら変更する。変更後は、エントリーポイントとして使う。

このスクリプトは、環境変数をセットして、引数があれば、その名前のプロビジョニングスクリプトを実行する。このとき、run_script.sh を呼ぶ。引数がなければ、wrap.sh をソースする。

wrap.sh

変更は不要。

関数ライブラリ functions.sh と設定ファイル config.sh をソースした後で main.sh をソースする。

main.sh

ターゲットディレクトリにコピーされたら変更する。

最初に必ずやるべきことを列挙したスクリプト。引数なしの run.sh からソースされる。

functions.sh

変更は不要。関数ライブラリ。

その他のスクリプト

run_script.sh

関数ライブラリ functions.sh をソースして、指定されたスクリプトを実行する。なぜか、config.sh は使わない。

config.sh

環境変数をセットして export する。環境変数は全般的・大域的に使うもの。

  • $MY_DOMAIN 当該ドメイン
  • $MY_HOSTNAME 当該ホスト名
  • $USER ユーザー名
  • $PASSWD ユーザーのパスワード
  • $FORWARD メールのフォーワード先メールアドレス

環境変数

  • $RUNTIME_PROV_DIR : プロビジョニング作業用ディレクトリパス。run.sh の冒頭でセットされる。したがて、run.sh に直書き。

どういうつもり?

  1. マスターディレクトリに必要なファイルを集めて、作業はターゲットディレクトリで行う。
  2. マスターディレクトリ内で prov.sh を実行してターゲットディレクトリの初期化を行う。
  3. ターゲットディレクトリ内でスクリプトの編集を行う。← ここだダサいし間違えやすい。
  4. ターゲットディレクトリ内で run.sh を引数無しで実行するとセットアップ終了。← のはず。

問題点

  1. スクリプトが、どのような入力(コマンドライン引数と環境変数)で動作するかの仕様が曖昧

次の書式で記述するか。

cmd
 args:
  arg1  必須
  arg2? オプショナル
  arg3?=x オプショナルでデフォルト値あり
  if (arg1) arg4 arg1 が指定されたときは必須
  if (arg1) arg5? arg1 が指定されたときはオプショナル
  if (arg1=a) arg4 arg1 がaに指定されたときは必須
  if (arg1=a) arg5? arg1 がaに指定されたときはオプショナル

 envs:
  $FOO 必須
  $BAR? オプショナル
  $BAZ?=baz オプショナルでデフォルト値あり

 requires:
  foo.sh ソースしている必要があるライブラリや設定データ