絶対パスと相対パス(自分自身が存在するパス 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