gpt4 book ai didi

linux - 不存在文件的脚本没有错误

转载 作者:太空宇宙 更新时间:2023-11-04 11:49:30 24 4
gpt4 key购买 nike

我有一个读取文本文件并使用其内容的 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.tx 而不是现有文件 ABC.txt,并且 errorcatcher 函数没有被调用并且脚本成功完成(Execution complete 得到回应)。

有人可以帮我解决这个问题吗?我很好奇为什么 errorcatcher 没有被调用

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

最佳答案

Function errorcatcher does not get invoked …

确实,像这样的循环重定向有错误

while read line; do

done < ${MYFILE}

ERR 陷阱未被调用。您在执行 trap 命令时发现了一个未记录的异常,或者,如果您愿意,发现一个错误。

您可以通过在 while 之前添加额外的重定向测试来避免这种情况,例如。 G。线路

<$MYFILE

它自己会调用错误陷阱。

关于linux - 不存在文件的脚本没有错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56474139/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com