関数名をfile.func
のような名前にリネームする。
成果物
実行
git clone https://github.com/ytyaru/Shell.import.prefix.module.name.20200120000000 cd ./src ./main.sh
Called MyLib() Called MyLibA() Called MyLib2()
コード
- sub/
- lib2.sh
- lib.sh
- main.sh
- moduled_import.sh
main.sh
. ./moduled_import.sh lib.sh sub/lib2.sh
lib.MyLib
lib.MyLibA
lib2.MyLib2
lib.sh
MyLib() { echo 'Called MyLib()'; } MyLibA() { echo 'Called MyLibA()'; }
sub/lib2.sh
MyLib2() { echo 'Called MyLib2()'; }
注意
import
自体を.
(source
)コマンドで読み込む必要がある- 関数にディレクトリ名がない
- 例えば関数名は
file.func
のようになってしまう dir.file.func
のようにできない
- 例えば関数名は
- インポートのルートディレクトリは
import
呼出元ファイルが存在するディレクトリです
技術的ポイント
関数名一覧。参考
"$(declare -F -p | cut -d " " -f 3)"
env -i bash -c "commands..."
関数名のリネーム。参考
RenameFunction() { # $1:old_func_name, $2:new_func_name declare -F "$1" > /dev/null || return 1 eval "$(echo "${2}()"; declare -f ${1} | tail -n +2)" unset -f "$1" }
所感
次はディレクトリ名もプレフィクスに付与したい。
対象環境
- 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