やってみる

アウトプットすべく己を導くためのブログ。その試行錯誤すらたれ流す。

Bashでimportを再現する1(呼出元をルートとした相対パスで指定したファイルを`.`(`source`)する)

 プロトタイプ。

成果物

結果

. ./import.sh lib.sh

 短縮できる。import.shを以下のように修正すれば。

  1. import.shファイルをimportにリネームする
  2. 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

問題

  1. import自体を.(source)コマンドで読み込む必要がある
  2. 関数に名前空間がない
    • 例えば関数名はfuncのようになってしまう
    • dir.file.funcのようにできない
  3. インポートのルートディレクトリはimport呼出元ファイルが存在するディレクトリである

参考

所感

 とりあえずできた。

 実用的にするならdir.file.funcみたいに名前空間のようなプレフィクスをつけたい。さもなくば名前重複が頻発して使い物にならない。ほかにも色々ある。本格的にやるなら大変なことになりそう。次回インポートについて考えてみる。

対象環境

$ uname -a
Linux raspberrypi 4.19.75-v7l+ #1270 SMP Tue Sep 24 18:51:41 BST 2019 armv7l GNU/Linux