我有上传分隔文件并进行处理的任务。一旦处理完成,我要么说它成功了,如果解析失败,我需要抛出错误。我在子脚本中逐行读取此文件,然后在主脚本中处理它(因此我不能在读取时使用ifs)。
我将重命名为.done,以防所有行都被解析。现在我想知道EOF到达之前何时出现错误,以便我可以将其重命名为.err。如果我有一个没有换行符的文件怎么办?
结构主要如下:
Main script:
Calls parent script with filepath
gets the fileName and no of line in the files, calls the Child script with a nth line no in a loop until total no of lines are reached
Parent script:
#some validations to get the txt file from the list of files
...
fileName=`ls -A1 *.txt`
...
Child script:
...
lineno=$1
fileName=$2
noOfLines=$3
line=`tail -$lineno $fileName | head -n1`
if [ $lineno -eq $noOfLines ]
then
noExt="${fileName%.*}"
mv "$fileName" "$noExt.done" #success case
fi
现在我还需要将文件重命名为.err,如果它的错误或解析失败。 请告诉我如何捕获错误。
答案 0 :(得分:0)
您可以在子脚本中使用exit 1
或exit 0
(使用0表示“无错误”),并检查父脚本中的返回值$?
。如果要查看tail命令的退出代码,此解决方案将失败:$?
将成为head -n1
的exitcode。在ksh中,您无法使用Bash解决方案$ {PIPESTATUS}。处理此问题的最佳方法是用单个命令(sed ${lineno}'q;d' "${filename}"
)替换tail..head结构。
您的示例代码不完整,我不明白为什么您需要为每个调用获取一行。对于大文件,这是一个很大的开销。请考虑一下!