bash - 如果文件为空则退出 1 否则继续下一步
问题描述
我正在编写一个 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的成本)。
应该注意的是,;
右大括号之前是强制性的。
推荐阅读
- html - 使用jQuery单击图像时显示和隐藏相应的列表?
- c - C scanf() 格式化的行为
- javascript - 当字符串在双引号内有单引号时,如何在Javascript中将此字符串转换为JSON对象
- excel - Workbook.close 导致 sub 退出
- c++ - 如何运行 Wave 快速入门示例?
- vba - PowerPoint 加载项 将文本框添加到所选幻灯片
- c# - 在实现具有默认方法实现的接口的类上使用`GetMethod`返回null
- c# - LINQ 在更大的集合中找到一组值的 MAX 值
- mysql - 执行灵活搜索查询时无法评估表达式方法引发“java.lang.illegalargumentexception”异常
- android - 无法使用 FileProvider 与其他应用共享图像文件