脚本不存在不存在文件的错误

时间:2019-06-06 08:58:23

标签: linux shell unix sh

我有一个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没有被调用

  1. 对于没有ls的不存在的文件
  2. 使用ls的不完整文件名(ABC.tx)

1 个答案:

答案 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

会自行调用错误陷阱。