【发布时间】:2020-08-05 19:35:37
【问题描述】:
我有以下 shell 脚本:
#!/bin/sh
echo "Run APP deployment $LC_APP_URL"
LC_CODE=$(
docker run --rm --name argocd-test \
-e DO_AC=$DO_AC \
-e K8S_CLUSTER=k8s-databaker-io \
-e ARGO_SERVER=cd.databaker.io \
-e ARGO_USERNAME="$ARGO_USERNAME" \
-e ARGO_PW="$ARGO_PW" \
-e IMAGE_URL=hub.databaker.io/ui/argo-ui-test \
-e IMAGE_VERSION=0.1.2 \
-e CHARTS_URL=gitlab.com/databaker.io/charts.git \
-e GITOPS_URL=gitlab.com/databaker.io/gitops.git \
-e APP_TYPE=ui \
-e APP=argo-ui-test \
-e APP_URL="$LC_APP_URL" \
-e APP_TLS_SECRET="dev-cert-staging" \
-e GIT_USER="$GIT_USER" \
-e GIT_AT=$GIT_AT \
-e NAMESPACE=dev \
"$LC_IMAGE_NAME" /sh/main.sh
echo $?
)
echo "????????????????????????? $LC_CODE"
if [ -z "$LC_CODE" ]; then
echo "Exit"
exit 1
fi
if [ "$LC_CODE" -ne 0 ]; then
echo "Run deployment failed"
exit 1
fi
这应该进入if [ -z "$LC_CODE" ]; 语句并打印Exit。 $LC_CODE 为空,因为语句 echo "????????????????????????? $LC_CODE" 显示 ????????????????????????? 。
如果$LC_CODE 设置或为空,如何验证?
【问题讨论】:
-
代替
echo尝试:declare -p LC_CODE来检查变量 -
别打扰了。只需执行
if ! docker ...。甚至只是docker ... || exit -
你确定你没有不小心在
/sh/main.sh后面加上一个反斜杠吗?如果你这样做了,那么echo和$?将是docker(或者更确切地说,main.sh)忽略的两个附加参数。 -
您的脚本是否使用 DOS 行尾?如果是这样,那么
LC_CODE的值是一个回车符,而不是一个空字符串。