Bashの大きなスクリプトから共通スクリプトを取得する

Bashの大きなスクリプトから共通スクリプトを取得する

私は自分のコンピュータを整理/管理するのに役立つかなりの数のシェルスクリプトの集まりを蓄積しましたが、何が混乱していたのかを整理したいと思います。

その中で、次の2つのユーティリティ関数を定義しました。

error() {
  printf '\e[4;5;31m%-s\e[m\n' "$@" >&2
}
warning() {
  printf '\e[4;5;33m%-s\e[m\n' "$@" >&2
}

私がやりたいことは、これらの機能と一般的に使用される他の機能を独自の.shファイルに入れることです。おそらく、別のbashスクリプトが他のタスクを実行する前に必要な機能を「含む」ことができるように、ディレクトリ階層で構成することです。

この問題関連していますが、これらの「一般」関数をシェルで使用できるようにしたくないだけで、その関数を使用するように選択したスクリプトで使用できるようにしたいです。これが、これらのスクリプトがこれらの関数を「含める」必要があると言う理由です。

これらの共通機能を「含む」推奨方法は何ですか?

現在私は次のことを試しています。

# this is myscript.sh residing in /home/enrico/path/to/
# error.sh only has the error() function as defined above, so I have to use echo to print the error message if I don't find it
source "$(dirname "$0")/commons/error.sh" || { echo "error.sh not found" >&2 && exit 1; }
# error() is available now
source "$(dirname "$0")/commons/warning.sh" || { error "warning.sh not found" && exit 1; }
# waringin() is available too
# ...
command_that_can_fail || error "failed because of bla and bla"
condition_to_be_concerned_about || warning "hey, there's something you should worry about"

私はこれらの2つのスクリプトを任意のディレクトリ(たとえば)で実行できるように前面source"$(dirname "$0")/これらの2つのファイルが相対的な場所)に追加しました。このスキルはいいですか?欠点はありますか?myscript.shmyscript.sh/home/enrico/path/to/myscript.sh

私が考えることができる1つの欠点は、その行でshellcheck'sディレクティブを使用できないことです。source

関連情報