【问题标题】:stop bash script if react build fails如果反应构建失败,则停止 bash 脚本
【发布时间】:2021-08-27 00:04:52
【问题描述】:

我有几个部署破坏了生产,因为如果构建失败,bash 脚本会继续。如果npm run build 失败,我如何确保脚本退出?

#!/usr/bin/env bash
source .env
ENVIRONMENT="$REACT_APP_STAGE"
if [ "$ENVIRONMENT" != "production" ]; then
    echo "improper .env NODE_ENV"
    exit
fi
git pull origin master
npm i
npm run build
rm -r /var/www/domain_name.dk/html/*
mv /var/www/domain_name.dk/website/build/* /var/www/domain_name.dk/html/

【问题讨论】:

  • npm 不会在失败时设置非零退出代码吗?在这种情况下,您可以使用npm run build || exit $?

标签: reactjs bash npm build


【解决方案1】:

这非常简单:

#!/usr/bin/env bash
source .env
ENVIRONMENT="$REACT_APP_STAGE"
if [ "$ENVIRONMENT" != "production" ]; then
    echo "improper .env NODE_ENV" >&2  # Errors belong on stderr
    exit 1
fi
git pull origin master
npm i
npm run build || exit  # Exit if npm run build fails
...

通过使用短路|| 运算符,如果npn run build 失败,则执行右侧的命令。 exit 返回最后执行的命令的退出状态,因此脚本将以与 npn run build 退出时相同的失败代码退出。如果npm run build成功,则exit不会被执行。

【讨论】:

    【解决方案2】:

    $? 运算符获取先前运行命令的返回码。因此,您可以将它与if 语句结合使用来验证npm run build 是否成功完成。

    #!/usr/bin/env bash
    source .env
    ENVIRONMENT="$REACT_APP_STAGE"
    if [ "$ENVIRONMENT" != "production" ]; then
        echo "improper .env NODE_ENV"
        exit
    fi
    git pull origin master
    npm i
    npm run build
    if [ $? -eq 0 ]; then
      echo "npm run build successful"
    else
      echo "npm run build failed" >&2
      exit 1
    fi
    rm -r /var/www/domain_name.dk/html/*
    mv /var/www/domain_name.dk/website/build/* /var/www/domain_name.dk/html/
    

    【讨论】:

    • 工作就像一个魅力,我还有很多关于 bash 脚本的知识
    • $? 不是运算符,它是一个“特殊参数”。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-12-17
    • 1970-01-01
    • 2022-12-16
    • 2020-09-03
    • 1970-01-01
    • 2014-03-26
    • 1970-01-01
    相关资源
    最近更新 更多