プロトタイプ。
成果物
結果
. ./import.sh lib.sh
短縮できる。import.sh
を以下のように修正すれば。
import.sh
ファイルをimport
にリネームするimport
ファイルを環境変数PATH
に通す
. import lib.sh
例
- pkg/
- main.sh
- lib.sh
lib.sh
F1() { :; }
main.sh
. ./import.sh lib.sh
F1
階層が深いときは/
- pkg/
- main.sh
- sub/
- lib.sh
. ./import.sh sub/lib.sh
複数ファイルを一度に取り込むなら
- pkg/
- main.sh
- lib1.sh
- lib2.sh
. ./import.sh lib1.sh lib2.sh
問題
import
自体を.
(source
)コマンドで読み込む必要がある- 関数に名前空間がない
- 例えば関数名は
func
のようになってしまう dir.file.func
のようにできない
- 例えば関数名は
- インポートのルートディレクトリは
import
呼出元ファイルが存在するディレクトリである
参考
- Bashファイルパスを取得する関数を作った(自分自身・呼出元)
- Bashで自分自身が存在するディレクトリパスを取得する(☓$0 ○$BASH_SOURCE)
- Bashで自分自身のフルパスを取得する(☓$0 ○$BASH_SOURCE)
- Bashで呼出元のフルパスを取得する (○$0 ☓$BASH_SOURCE)
所感
とりあえずできた。
実用的にするならdir.file.func
みたいに名前空間のようなプレフィクスをつけたい。さもなくば名前重複が頻発して使い物にならない。ほかにも色々ある。本格的にやるなら大変なことになりそう。次回インポートについて考えてみる。
対象環境
- Raspbierry pi 4 Model B
- Raspbian buster 10.0 2019-09-26 ※
- bash 5.0.3(1)-release
$ uname -a Linux raspberrypi 4.19.75-v7l+ #1270 SMP Tue Sep 24 18:51:41 BST 2019 armv7l GNU/Linux