如果文件为空则退出 1 否则继续下一步

exit 1 if a file is empty other wise continue to the next step

我正在编写 bash 脚本。

第 1 步 - 通过 curl 获取一些元数据并写入文件。

第 2 步 - 检查文件是否为空。 如果文件为空,注销 "File is empty. Exiting..." 并以状态码 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)

但是没有用。任何想法我的语法有什么问题?

[ -s sp_metadata.xml ] || (echo "ERROR - SP Metadata returned null. Exiting..."; \
  exit 1)

不起作用,因为您正在创建一个子 shell,所以 exit 1 基本上终止子 shell,而不是父脚本。

所以你应该试试:

[ -s sp_metadata.xml ] || { echo "ERROR - SP Metadata returned null. Exiting..."; \
  exit 1; }

这应该有效(并且还避免了创建子 shell 的成本)。

需要注意的是,右大括号前的;是必须的。