我有一个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
的不存在的文件ls
的不完整文件名(ABC.tx)答案 0 :(得分:0)
函数
public function get_empty_tables() { $this->db->from('dinner_tables'); $this->db->where('status', 0); $this->db->where('deleted', 0); $empty_tables = $this->db->get()->result_array(); $empty_tables_array = array(); foreach($empty_tables as $empty_table) { $empty_tables_array[$empty_table['dinner_table_id']] = $empty_table['name']; } return $empty_tables_array; }
未被调用...
确实,在像这样的循环重定向中存在错误
errorcatcher
未调用while read line; do
…
done < ${MYFILE}
陷阱。在执行ERR
命令的过程中发现了一个未记录的异常,或者,如果愿意,还发现了一个错误。
您可以通过在trap
之前添加一个额外的重定向测试来避免这种情况,例如G。线
while
会自行调用错误陷阱。