絶対パスと相対パス(自分自身が存在するパス or $BASH_IMPORT_DIR)からインポートできるよう対応。
成果物
特徴
- インポートするファイルのパスは以下3種類の方法で指定する
| path | root(base) | 
|---|---|
| ./a.sh | import呼出元ファイルが存在するディレクトリ | 
| a.sh | $BASH_IMPORT_DIR | 
| /tmp/a.sh | /tmp | 
. import ./a.sh . import a.sh . import /tmp/a.sh
. ./import.sh 'di r/fi le.sh' di-r.fi-le.func
- 別名にできる
. ./import.sh dir/file.sh as LIB
LIB.func
. ./import.sh dir/file.sh as LIB.SUB
LIB.SUB.func
- ファイルとディレクトリの名前の一部だけをプレフィクスにする
. ./import.sh A/B/C/D/E/F.sh -0 func
. ./import.sh A/B/C/D/E/F.sh -1 F.func
. ./import.sh A/B/C/D/E/F.sh -2 E.F.func
- 一度に複数ファイルをインポートする(リネームはできない)
. ./imports.sh lib1.sh lib2.sh lib3.sh ...
lib1.func
lib2.func
lib3.func
実行
git clone https://github.com/ytyaru/Shell.import.base_path.2020012400000 cd ./src ./main.sh
importの準備
importの呼出例
- /tmp/
- lib.sh
 
- /var/
- lib.sh
 
- repo/
- main.sh
- su b/
- li b.sh
 
 
sub/lib.sh
Func() { echo 'Called su b/li b.sh Func()'; }
パス
以下のようなパターンがある。
main.sh
. import /tmp/lib.sh
tmp.lib.Func
BASH_IMPORT_DIR='/var' . import /tmp/lib.sh tmp.lib.Func
export BASH_IMPORT_DIR='/var' . import lib.sh tmp.lib.Func unset BASH_IMPORT_DIR
. import './su b/li b.sh' su-b.li-b.Func
 パスに./がなくてBASH_IMPORT_DIRもなければ自分自身のファイルが存在するディレクトリパスをルートとする。
. import 'su b/li b.sh' su-b.li-b.Func
リネーム
以下のようなパターンがある。
. import 'su b/li b.sh' su-b.li-b.Func
. import 'su b/li b.sh' as LIB LIB.Func
. import 'su b/li b.sh' as LIB.SUB LIB.SUB.Func
. import 'su b/li b.sh' -0 Func
. import 'su b/li b.sh' -1 li-b.Func
. import 'su b/li b.sh' -2 su-b.li-b.Func
前回まで
- Bashでimportを再現する1(呼出元をルートとした相対パスで指定したファイルを.(source)する)
- Bashでimportを再現する2(名前のプレフィクスにファイル名をつける)
- Bashでimportを再現する3(名前のプレフィクスにディレクトリ名とファイル名をつける)
- Bashでimportを再現する4(名前のプレフィクスにディレクトリ名とファイル名をつける(スペースをハイフンに変換する))
- Bashでimportを再現する5(プレフィクスのリネーム)
注意
- import自体を- .(- source)コマンドで読み込む必要がある
- ファイル内で定義した関数名や変数名を変更できない
- 実装しないつもりである
 
- 対応済みのスペース以外にもbashのメタ文字がある。$,(),{},!,#,",',`,~,\,;。これらもハイフン化すべき- 一旦放置
 
所感
とりあえず完成としておく。
対象環境
- 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