きり丸の技術日記

技術検証したり、資格等をここに残していきます。

【Bash】別ファイルに定義した変数を使用する

小ネタ。なお、特に説明はしていませんが、関数も変数と同じように使えます。

環境

  • Bash
    • GNU bash, version 5.0.17(1)-release (x86_64-pc-linux-gnu)
  • Ubuntu 20.04.2 LTS
    • GitHub Codespaces

概要

  1. 変数を使用したいシェルから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を呼ぶ

ソースコード

shell-practice/100 at ca6b4cf211e13a4e8e7fcc7c0ebc82b2ab166cf2 · hirotoKirimaru/shell-practice · GitHub

終わりに

分かっていれば簡単ですが、シェルは書き捨てることが多くて思い出すのに時間がかかりました。はっきり言って、シェルは嫌いです…。テストも書けませんしね。

自分で何度も検索するのが面倒なので、自分でまとめました。あまり価値の高い記事とは言えませんが、自分用のブログなのでこういう記事もガンガン書いて知識を蓄積させていこうと思います。