我有shell脚本:如何将shell函数从一个文件导入到另一个文件中?
#!/bin/bash
export LD=$(lsb_release -sd | sed 's/"//g')
export ARCH=$(uname -m)
export VER=$(lsb_release -sr)
# Load the test function
/bin/bash -c "lib/test.sh"
echo $VER
DISTROS=('Arch'
'CentOS'
'Debian'
'Fedora'
'Gentoo')
for I in "${DISTROS[@]}"
do
i=$(echo $I | tr '[:upper:]' '[:lower:]') # convert distro string to lowercase
if [[ $LD == "$I"* ]]; then
./$ARCH/${i}.sh
fi
done
正如你可以看到它应该运行shell脚本,这取决于它运行在其上的架构和操作系统上。它应该在运行此体系结构和特定于操作系统的脚本之前首先运行脚本lib/test.sh
。这是lib/test.sh
:
#!/bin/bash
function comex {
which $1 >/dev/null 2>&1
}
,当我用这个x86_64/arch.sh
脚本在x86_64 Arch Linux的运行:
#!/bin/bash
if comex atom; then
printf "Atom is already installed!"
elif comex git; then
printf "Git is installed!"
fi
它返回的输出:
rolling
./x86_64/arch.sh: line 3: comex: command not found
./x86_64/arch.sh: line 5: comex: command not found
如此明确的comex
壳功能在x86_64/arch.sh
脚本运行时未正确加载。因此,我很困惑,并且想知道为了正确定义comex
函数需要做什么,以便它正确加载到这个体系结构和依赖于操作系统的最终脚本中。
我已经尝试使用. "lib/test.sh"
而不是/bin/bash -c "lib/test.sh"
,并且我收到了完全相同的错误。我也尝试在循环中加入. "lib/test.sh"
,就在./$ARCH/${i}.sh
行之前。这也失败了,返回相同的错误。
'。 lib/test.sh',我相信。 –