在 bash 脚本中捕获来自作曲家验证的 return 代码
Catch return code from composer validate in bash script
我正在尝试编写一个 bash 脚本,在尝试 运行 composer install
之前验证 composer.lock 与 composer.json 是最新的。
我试过这样的事情:
if composer validate --no-check-all
then echo "Composer validation failed..."
exit 1;
fi
# composer install
这确实会在验证错误时退出我的脚本,但是当验证通过时,我仍然会得到以下输出:
./composer.json is valid
Composer validation failed...
我做错了什么?
编辑:正如 Jeff Schaller 正确指出的那样,if 块中的测试语句缺少否定。它对问题的影响不大(因为 composer validate 的退出代码是相同的)。我保留原来的措辞,以免引起更多混淆。
我唯一注意到的是你 if
背后的意图似乎是倒退的。如果验证失败,您的意图是退出脚本,由 return code from composer
, which is documented as:
指示
- 0:好的
- 1: Generic/unknown 错误代码
- 2:依赖解决错误码
if
conditional construct 接受 test-commands 和...
的列表
if its return status is zero, the consequent-commands list is executed
所以你可能 打算 是 invert/negate 那 return 代码,这样你就可以在你从 non-zero 获得状态时退出作曲家:
if ! composer validate --no-check-all
then echo "Composer validation failed..."
exit 1;
fi
# composer install
在您的情况下,composer validate ...
似乎是 returning 0,无论它是否遇到错误。也许您正受到 this bug report related to brew
?
的影响
您过于相信作曲家退出代码的可靠性。
命令
composer validate --no-check-all
返回零,这是正确的,因为该命令在执行过程中没有实际问题。考虑捕获变量中的输出并读取它。
#!/bin/bash
OUTPUT=$(composer validate --no-check-all)
if [[ "$OUTPUT" == *"is valid"* ]]; then
echo "composer.json is valid (or whatever you want to do here)"
fi
我正在尝试编写一个 bash 脚本,在尝试 运行 composer install
之前验证 composer.lock 与 composer.json 是最新的。
我试过这样的事情:
if composer validate --no-check-all
then echo "Composer validation failed..."
exit 1;
fi
# composer install
这确实会在验证错误时退出我的脚本,但是当验证通过时,我仍然会得到以下输出:
./composer.json is valid
Composer validation failed...
我做错了什么?
编辑:正如 Jeff Schaller 正确指出的那样,if 块中的测试语句缺少否定。它对问题的影响不大(因为 composer validate 的退出代码是相同的)。我保留原来的措辞,以免引起更多混淆。
我唯一注意到的是你 if
背后的意图似乎是倒退的。如果验证失败,您的意图是退出脚本,由 return code from composer
, which is documented as:
- 0:好的
- 1: Generic/unknown 错误代码
- 2:依赖解决错误码
if
conditional construct 接受 test-commands 和...
if its return status is zero, the consequent-commands list is executed
所以你可能 打算 是 invert/negate 那 return 代码,这样你就可以在你从 non-zero 获得状态时退出作曲家:
if ! composer validate --no-check-all
then echo "Composer validation failed..."
exit 1;
fi
# composer install
在您的情况下,composer validate ...
似乎是 returning 0,无论它是否遇到错误。也许您正受到 this bug report related to brew
?
您过于相信作曲家退出代码的可靠性。
命令
composer validate --no-check-all
返回零,这是正确的,因为该命令在执行过程中没有实际问题。考虑捕获变量中的输出并读取它。
#!/bin/bash
OUTPUT=$(composer validate --no-check-all)
if [[ "$OUTPUT" == *"is valid"* ]]; then
echo "composer.json is valid (or whatever you want to do here)"
fi