命令的输出未存储且正则表达式失败

命令的输出未存储且正则表达式失败

我正在尝试编写一个yarn prettier --check ./src为我的 React 应用程序运行的 git post-push 挂钩,以强制执行良好的代码格式。我认为我可以存储命令的输出并使用正则表达式来查看是否出现特定错误。

我试图作为 bash 脚本运行:

#!/bin/bash
cd frontend/
VAR=$(yarn prettier --check ./src)
if [[ $VAR =~ .*"error Command failed with exit code 1."* ]]; then
        echo "Failed to run prettier before push."
else
        echo "Passed prettier"
fi

输出显示什么:

[warn] src/order/orderApi.ts
[warn] Code style issues found in the above file. Forgot to run Prettier?
error Command failed with exit code 1.                                                                          
Passed prettier

我故意在 orderApi.tx 中放置了一个我知道 prettier 会捕获的错误

我认为当你存储输出时,Variable=$(command insert) 我已经检查了以下教程,但我没有得到任何结果:

答案1

您可以使用以下命令检查命令的退出代码,而不是使用字符串比较:

yarn prettier --check ./src
if [[ $? -eq 1 ]]; then
        echo "Failed to run prettier before push."
else
        echo "Passed prettier"
fi

重要的: 在方括号和语句之间添加一个空格:[[ $? -eq 1 ]];


关于字符串比较,您的变量实际上永远不会有错误消息,因为纱线错误被重定向到stderr并且您仅分配stdout命令的。因此,如果您还想分配错误/stderr,则重定向stderrstdout

VAR=$(yarn prettier --check ./src 2>&1)

# or: if [[ $VAR =~ "error Command failed with exit code 1." ]]; then
if [[ $VAR =~ .*"error Command failed with exit code 1."* ]]; then
        echo "Failed to run prettier before push."
else
        echo "Passed prettier"
fi

或者仅stderr使用以下命令重定向:

VAR=$(yarn prettier --check ./src 2>&1 >/dev/null)

相关内容