我正在编写bash脚本。
第1步-通过curl
提取一些元数据并写入文件。
第2步-检查文件是否为空。 如果文件为空,请注销“文件为空。正在退出...”,并以状态代码1退出。如果文件不为空,请继续执行步骤3。
第3步-进一步处理文件。
所以我试图将步骤2优化为一行。
这是我到目前为止尝试过的。
[ -s sp_metadata.xml ] || echo "ERROR - SP Metadata returned null. Exiting..." && exit 1
现在,如果文件为空,则会得到以下结果。
touch sp_metadata.xml
sh -x ./register.sh
+ [ -s sp_metadata.xml ]
+ echo ERROR - SP Metadata returned null. Exiting...
ERROR - SP Metadata returned null. Exiting...
+ exit 1
但是当我将数据写入文件时,我得到了
echo "Test" > sp_metadata.xml
sh -x ./register.sh
+ [ -s sp_metadata.xml ]
+ exit 1
好像每次都在运行exit 1
。我猜这是因为&&
。
我尝试了
[ -s sp_metadata.xml ] || echo "ERROR - SP Metadata returned null. Exiting..." ; exit 1
也尝试过
[ -s sp_metadata.xml ] || (echo "ERROR - SP Metadata returned null. Exiting..." && exit 1)
但是没有用。任何想法我的语法有什么问题吗?
答案 0 :(得分:1)
[ -s sp_metadata.xml ] || (echo "ERROR - SP Metadata returned null. Exiting..."; \
exit 1)
不起作用,因为您正在创建子外壳,因此exit 1
基本上终止了该子外壳,但不终止父脚本。
所以您应该尝试:
[ -s sp_metadata.xml ] || { echo "ERROR - SP Metadata returned null. Exiting..."; \
exit 1; }
这应该可以工作(并且还避免了创建子shell的成本)。
请注意,右括号前的;
是强制性的。