通常包含脚本的方式是"source"
eg:
main.sh:
#!/bin/bash
source incl.sh
echo "The main script"
incl.sh:
echo "The included script"
执行“。/main.sh”的结果是:
The included script
The main script
... 现在,如果您试图从另一个位置执行该shell脚本,它将无法找到包含,除非它在您的路径中。
确保脚本能够找到包含脚本的好方法是什么,特别是在脚本需要可移植的情况下?
个人将所有库放在lib文件夹中,并使用导入函数来加载它们。
文件夹结构
script.sh内容
# Imports '.sh' files from 'lib' directory
function import()
{
local file="./lib/$1.sh"
local error="\e[31mError: \e[0mCannot find \e[1m$1\e[0m library at: \e[2m$file\e[0m"
if [ -f "$file" ]; then
source "$file"
if [ -z $IMPORTED ]; then
echo -e $error
exit 1
fi
else
echo -e $error
exit 1
fi
}
注意,这个导入函数应该在脚本的开头,然后你可以像这样轻松地导入你的库:
import "utils"
import "requirements"
在每个库(例如utils.sh)的顶部添加一行:
IMPORTED="$BASH_SOURCE"
现在您可以从script.sh访问utils.sh和requirements.sh中的函数
待办事项:编写一个链接器来构建一个sh文件