为什么存储在Azure存储中的shell脚本只有在文件末尾添加额外的echo语句时才运行



我有一个存储在Azure存储中的shell脚本。我在Azure上运行的应用程序从Azure存储调用此脚本。它没有按预期运行。经过大量的故障排除,我发现当我在末尾添加一个额外的echo语句时,它就会运行。

我的原始脚本看起来像这个

#!/bin/bash
echo "Configuring my App"
jetpack download my_binary_file
chmod u+x my_binary_file
MY_FILE=$(jetpack config somedir.somepath) ./my_binary_file -clusterInit

我更新的带有额外回声的脚本看起来像这个

#!/bin/bash
echo "Configuring my App"
jetpack download my_binary_file
chmod u+x my_binary_file
MY_FILE=$(jetpack config somedir.somepath) ./my_binary_file -clusterInit
echo ""

使用第一个脚本,我得到:

Failed to execute cluster-init script my_script.sh. return code: 1Detail: Script output: Configuring my App 2021/05/18 13:25:43 exit status 2 exit status 2

使用第二个脚本(文件末尾有eco"(,我得到了成功的脚本执行:

Configuring my App

为什么脚本运行时带有echo"最后,但不是没有这个?

您的脚本和所有命令在这两种情况下运行完全相同,只是您将成功标准从"集群被初始化";至";写了一个空行";。

"执行集群初始化脚本my_script.sh失败。返回代码:1"并不意味着";脚本没有运行";。相反,它的意思是";my_script.sh被执行并运行到完成,但它报告说它未能完成它的工作"。

您可以使用exit 0以自我报告成功退出,使用exit 1(或更高(以自我报告失败退出。如果没有明确的exit,则退出代码是最后执行的命令的退出代码。

当您添加另一个命令(如echo ""(时,它将成为最后一个命令,从而确定退出代码。它没有帮助或解决任何问题,只是隐藏了失败,这样工作流就会认为脚本成功了,而脚本没有成功。

最新更新