我已经积累了相当多的 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