小ネタ。なお、特に説明はしていませんが、関数も変数と同じように使えます。
環境
- Bash
- GNU bash, version 5.0.17(1)-release (x86_64-pc-linux-gnu)
- Ubuntu 20.04.2 LTS
- GitHub Codespaces
概要
- 変数を使用したいシェルから
source
コマンドで変数を定義したシェルを呼びます
対応
変数を使用したいシェル
source
コマンドで変数を定義しているファイルを呼びます。
ファイル名:main.sh
#!/bin/bash # 変数を定義しているシェルを呼ぶ source ./property/it.sh echo $protocol://$ip:$port$base_path # http://127.0.0.1:80/api/v1
変数を定義するシェル
変数を定義します。
ファイル名:it.sh
#!/bin/bash protocol="http" ip="127.0.0.1" port="80" base_path="/api/v1"
注意点
source
コマンドはbashです。shにはないので注意してください。
# 今回の例では、下で定義すると動かない #!/bin/sh
実際の運用
私は、環境ごとに変数を定義するシェルを用意して運用していました。シェルとディレクトリ構成はこのようにしていました。
ディレクトリ構成
- main.sh
- property
- it.sh
- st.sh
- prd.sh
パラメータごとに別のシェルを呼び分けたい
ファイル名:main.sh
#!/bin/bash # main.shのディレクトリを基準にするコマンド shell_root_path=`dirname {0}` env=$1 source $shell_root_path/property/$env.sh
実際にシェルを呼ぶときのコマンド
./main.sh it # it.shを呼ぶ ./main.sh st # st.shを呼ぶ ./main.sh prd # prd.shを呼ぶ
ソースコード
終わりに
分かっていれば簡単ですが、シェルは書き捨てることが多くて思い出すのに時間がかかりました。はっきり言って、シェルは嫌いです…。テストも書けませんしね。
自分で何度も検索するのが面倒なので、自分でまとめました。あまり価値の高い記事とは言えませんが、自分用のブログなのでこういう記事もガンガン書いて知識を蓄積させていこうと思います。