我对 bash shell 脚本有一个奇怪的问题,我希望能对它有一些见解。
我的团队正在编写一个脚本,该脚本迭代文件中的行,并检查每一行中的内容。我们有一个 bug,当通过自动化过程将不同的脚本序列在一起运行时,没有看到最后一行。
用于迭代文件中的行的代码(存储在 DATAFILE
中的名称为
cat "$DATAFILE" | while read line
我们可以从命令行运行脚本,它可以看到文件中的每一行,包括最后一行,很好。但是,当由自动化进程运行时(自动化进程在有问题的脚本之前运行生成 DATAFILE 的脚本) ,从来不会看到最后一行。
我们更新了代码,使用下面的代码来遍历代码行,问题就解决了:
for line in `cat "$DATAFILE"`
注意: DATAFILE 没有在文件末尾写入换行符。
我的问题分为两部分... 为什么最后一行不会被原始代码看到,为什么这个改变会产生不同?
我只能想到,为什么最后一句台词看不到:
也就是说,如果您在一个 shell 脚本中有两个命令,那么当脚本运行第二个命令时,第一个命令应该完全关闭。
对这些问题的任何洞察力,尤其是第一个,都将非常感激。