Shell脚本读取最后一行丢失
我有一个... bash shell脚本的奇怪问题,我希望得到一些见解。
我的团队正在编写一个脚本,该脚本遍历文件中的行并检查每个行中的内容。我们有一个错误,当通过将不同脚本排序在一起的自动化过程运行时,最后一行没有被看到。
使用的代码遍历文件中的行(名称存储在DATAFILE
被
cat "$DATAFILE" | while read line
我们可以从命令行运行脚本,它会看到文件中的每一行,包括最后一行,就好了。但是,当由自动化进程(运行在相关脚本之前生成DATAFILE的脚本)运行时,永远不会看到最后一行。
我们更新了代码以使用以下代码迭代这些行,并清除了问题:
for line in `cat "$DATAFILE"`
注意:DATAFILE没有在文件末尾写入换行符。
我的问题是两部分......为什么最后一行不会被原始代码看到,为什么这会改变有所作为呢?
我只想到我能想出为什么最后一行不会被看到:
前一个写入文件的进程依赖于进程结束以关闭文件描述符。
问题脚本正在启动并以足够快的速度打开文件,而前一个进程已“结束”,它没有“关闭/清理”足以让系统自动关闭文件描述符。
话虽这么说,似乎,如果你在shell脚本中有2个命令,那么第一个应该在脚本运行第二个时完全关闭。
对问题的任何见解,尤其是第一个,都将非常感激。
呼如林
守候你守候我