我正在尝试编写一些shell脚本(用于Docker和VSCode开发容器),但我完全是个新手。我正在尝试复制utility script found here,它确实非常简单:
# Checks if command exists, installs it if not
# check_command <command> "<apt packages to install>" "<apk packages to install>" "<dnf/yum packages to install>"
check_command() {
command_to_check=$1
shift
if type "${command_to_check}" > /dev/null 2>&1; then
return 0
fi
install_packages "$@"
return $?
}
# Installs packages using the appropriate package manager (apt, apk, dnf, or yum)
# install_packages "<apt packages to install>" "<apk packages to install>" "<dnf/yum packages to install>"
install_packages() {
if type apt-get > /dev/null 2>&1; then
apt_get_update_if_needed
apt-get -y install --no-install-recommends $1
elif type apk > /dev/null 2>&1; then
apk add $2
elif type dnf > /dev/null 2>&1; then
dnf install -y $3
elif type yum > /dev/null 2>&1; then
yum install -y $3
else
echo "Unable to find package manager to install ${command_to_check}"
exit 1
fi
}
其中一个应该包含utils.sh
并运行check_command curl
来安装curl
,如果需要的话。在my install.s
h中,我正在做的是:
#!/usr/bin/env bash
set -e
# Import common utils
. ./utils.sh
# Verify dependencies
apt_get_update_if_exists
check_command curl
curl -o /usr/local/foo https://foo.example
此脚本失败:
./www.example.com:第10行: curl :install.sh: line 10: curl: command not found
在check_command
中添加调试行显示install_packages "$@"
为空,即参数"curl"未正确传递给install_packages
。
任何有助于理解为什么会发生这种情况的帮助都非常感谢。
1条答案
按热度按时间xwbd5t1u1#
你的
check_command
函数调用了install_packages
的所有参数,但是只调用了一个参数,当然install_packages
也只接收一个参数,但是你让它引用了$2
和$3
,你也可以把它们放在双引号里。