linux - 不存在文件的脚本没有错误
问题描述
我有一个读取文本文件并使用其内容的 shell 脚本。到目前为止,一切都很好。但是现在如果找不到文件,我正在尝试让脚本退出。脚本看起来像这样
#!/bin/bash
function errorcatcher() {
errorcode=$?
echo "ERROR CODE : ${errorcode}"
exit ${errorcode}
}
trap errorcatcher ERR
MYFILE=$1
IFS='|'
while read line; do
echo ${line}
done < ${MYFILE}
echo "Execution complete"
我将脚本运行为
sh myscript.sh /home/mydir/ABC.txt
它工作正常。但如果我试试这个
sh myscript.sh /home/mydir/nonexisting.file
我明白了
myscript.sh: line 17: /home/mydir/nonexisting.file: No such file or directory
Execution complete
函数errorcatcher
没有被调用,并且没有以错误代码退出,而是继续执行,Execution complete
即使有问题的文件不存在,我也会得到该行。我的猜测是这里没有产生错误,所以我在阅读文本文件之前添加了这一行
ls ${MYFILE}
这次errorcatcher
被调用。但如果我尝试
sh myscript.sh /home/mydir/ABC.tx
我没有传递现有文件ABC.txt
,而是传递其不完整的名称ABC.tx
,并且再次errorcatcher
不调用该函数并且脚本成功完成(Execution complete
得到回显)。
有人可以帮我解决这个问题吗?我很好奇为什么errorcatcher
不被调用
- 对于不存在的文件
ls
- 对于不完整的文件名(ABC.tx)
ls
解决方案
函数
errorcatcher
没有被调用……</p>
确实,在重定向循环时出现错误,例如
while read line; do
…
done < ${MYFILE}
不ERR
调用陷阱。您在命令的实现中发现了一个未记录的异常trap
,或者,如果您愿意,还发现了一个错误。
您可以通过在 之前添加额外的重定向测试来避免这种情况while
,例如该行
<$MYFILE
它自己将调用错误陷阱。
推荐阅读
- python - 将所有 tkinter GUI 保存为 PDF
- reactjs - 在过滤函数 React 中使用对象数组时获取一个空数组
- sql - 如何使用 postgreSQL 产生循环移位
- java - 通过从 Repository 方法返回 Page<> 生成的计数查询在 org.hibernate.QueryException 上崩溃:意外字符:'`'
- react-native - 从 react native/axios 发送图像
- loopbackjs - 在 LoopBack 4 中拦截服务/数据源
- date - 从日志文件中获取最后 5 分钟
- javascript - 在 React 中失去焦点时关闭菜单
- python - 遍历行的每个元素都是列表并与另一个数据框进行比较的行的矢量化方法
- python - 将柏林噪声多次应用于平面/球体