从 bash 中的较大脚本中获取通用脚本

从 bash 中的较大脚本中获取通用脚本

我已经积累了相当多的 shell 脚本来帮助我配置/管理我的计算机,我想对变得混乱的事情进行一些整理。

在其中许多中,我定义了如下两个实用函数

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

我想做的是将这些函数和其他常用函数分别放在自己的.sh文件中,也许将它们组织在目录层次结构中,以便其他 bash 脚本可以在执行其他操作之前“包含”它们需要的函数。

这个问题是相关的,但我不希望这些“通用”函数在 shell 中可用,我只是希望它们可供选择使用它们的脚本使用,这就是为什么我说这些脚本应该“包含”这些函数。

“包含”这些常见功能的推荐方式是什么?

目前,我正在尝试这样的事情:

# 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"

我已经source将这两个脚本添加到前面"$(dirname "$0")/(到这两个文件相对于 的位置myscript.sh),以便能够myscript.sh从任何目录运行,例如/home/enrico/path/to/myscript.sh。这个技术好不好?有什么缺点吗?

我能想到的一个缺点是我不能在该行中使用shellcheck's指令。source

相关内容