我有一个存储在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: 1
Detail: 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 ""
(时,它将成为最后一个命令,从而确定退出代码。它没有帮助或解决任何问题,只是隐藏了失败,这样工作流就会认为脚本成功了,而脚本没有成功。