我下载了一个包含 .sh 脚本的存储库,用于打开 Docker 容器。我运行的是 Windows 10,其中包含 Docker Toolbox(而不是完整版,后者存在一些 Hyper-V 问题)及其相关 shell,我尝试在其中和 git-bash(基于 MinGW/mintty)中运行该脚本,在这两种情况下,我都得到了
$ ./build-image.sh
Unknown target
以下是完整脚本,为保护隐私,我们进行了轻微编辑:
case $1 in
keras_base)
docker build -f docker/keras_base docker -t foo:keras_base
;;
keras_branch)
git archive HEAD > bar.tar
cp bar.tar docker/keras_branch
branch=$(git rev-parse --abbrev-ref HEAD)
docker build docker/keras_branch -t "foo:keras_${branch}"
docker tag "foo:keras_${branch}" "XXXXXXXXXXX.dkr.ecr.us-east-1.amazonaws.com/foo:keras_${branch}"
;;
*)
echo Unknown target "$1"; exit 1
;;
esac
答案1
一个经典案例橡皮鸭调试,写出这句话让我找到了答案:脚本中就有未知的目标参数,这表明我没有给它提供参数。具体来说,在 bash 脚本中,参数以美元符号为前缀,从零开始索引,因此 $0 是脚本的名称,而 $1、$2 等是附加参数。第一行case $1 in
检查 $1(文件名后的参数)是否是“keras_base”或“keras_branch”之一。如果不是,或者没有提供,则返回Unknown target
。