如果文件为空则退出 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 的成本)。
需要注意的是,右大括号前的;
是必须的。
我正在编写 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 的成本)。
需要注意的是,右大括号前的;
是必须的。