Bashシェルスクリプトでiniファイルを読み、環境変数を定義する
Contents
はじめに
$HOME/.bitbucket
という INI
ファイル形式のファイルを読み込み、 ... = ...
形式で書かれている行から環境変数を定義したくなりました。
簡単なコードで実現してみました。
検証環境
$ uname -moi
x86_64 MacBookPro11,4 Darwin
$ bash -version | head -n 1
GNU bash, バージョン 5.0.11(1)-release (x86_64-apple-darwin18.6.0)
sed
を使う
sed
を使って、 ... = ...
というフォーマットの行だけを抽出して source
コマンドに食わせます。
# iniファイルのファイルパスを定義
$ declare -r INI_FILE="$HOME/.bitbucket"
# ... = ... 形式の行のみを抽出して、 source コマンドに食わせる
$ source <(sed -n -E 's/^\s*(\S+)\s*=\s*(.+)$/\1=\2/p' <"${INI_FILE}")
ちなみに、特定のセクション ( [ ... ]
)以降に書かれている設定のみを読み込むには以下のように記述します。
$ cat test.ini
[section0]
x=1
y=2
z=333
[section1]
a=3
b=4
c=5
[section2]
xxx=100
# iniファイルのファイルパスを定義
$ declare -r INI_FILE="test.ini"
# sectionを指定
$ declare -r SECTION="section1"
# ... = ... 形式の行のみを抽出して、 source コマンドに食わせる
$ source <(sed -n -E '/^\['${SECTION}'\]/,/^\[\S+\]/s/^\s*(\S+)\s*=\s*(.+)$/\1=\2/p' <"${INI_FILE}")
# 確認
$ set | grep '^[abc]='
a=3
b=4
c=5
ひとこと
もう少し簡潔に書きたい。ちょっとごちゃごちゃしたワンライナーになってますね。
ディスカッション
コメント一覧
まだ、コメントがありません