Bash 如何获取退出代码?

Bash 如何获取退出代码?,bash,shell,sh,Bash,Shell,Sh,我有以下shell声明: 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" \

我有以下shell声明:

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 \
    argocli:latest /sh/main.sh;
  echo $?
)
保存到
LC\u code
中的值为:

echo $LC_CODE
<===========================================>
Check if all variables are set
<===========================================>
1
echo$LC\u代码
检查是否设置了所有变量
1.
但是,我希望获取退出代码,而不是文本
检查是否设置了所有变量

如何获取退出代码?

您当前的代码将所有子shell命令的结果输入到
LC\u 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 \
    argocli:latest /sh/main.sh;

LC_CODE=$?
您可以通过以下方式将docker命令的结果标准化为另一个变量:

result=$(docker ...)
LC_CODE=$?

当前代码将所有子shell命令的结果标准化到
LC\u 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 \
    argocli:latest /sh/main.sh;

LC_CODE=$?
您可以通过以下方式将docker命令的结果标准化为另一个变量:

result=$(docker ...)
LC_CODE=$?

考虑将docker命令的输出发送到
/dev/null
,如下所示:

LC_CODE=$(   
  >/dev/null 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 \
    argocli:latest /sh/main.sh ;
  echo $?
)

为了强调这一点,我将
/dev/null
放在命令的开头(这不是常用的语法)。当然,你可以把它放在
前面
如果愿意。

考虑将docker命令的输出发送到
/dev/null
,如下所示:

LC_CODE=$(   
  >/dev/null 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 \
    argocli:latest /sh/main.sh ;
  echo $?
)

为了强调这一点,我将
/dev/null
放在命令的开头(这不是常用的语法)。当然,你可以把它放在
前面如果您愿意。

docker run。。。;LC_CODE=$?docker run。。。;LC_代码=$?