【问题标题】:Bash loop ends unexpectedly looping without showing whyBash 循环意外结束循环而不显示原因
【发布时间】:2010-10-08 13:46:53
【问题描述】:

我有一个 bash 脚本,其代码如下:

echo "EXECUTING TASK 1"
sort -r scripts/sh/test-list | while read fn; do    
    sh -vx scripts/sh/test-web-task.sh "$fn"
done

echo "EXECUTING TASK 2"
sort -r scripts/sh/test-unit-list | while read fn; do   
    sh -vx scripts/sh/test-unit-task.sh "$fn"
done

在 test-web-task 和 test-unit-task 中,我调用了 grails 来运行一些测试,然后进行一些打包工作。 像这样的:

grails test-app $1
mv results backup/$1

在文件 scripts/sh/test-unit-list 和 scripts/sh/test-list 我有一个要运行的测试列表。 像这样的:

Person
Book

第一个循环在没有运行文件 scripts/sh/test-list 的所有行的情况下中断,然后它开始运行第二个循环。

如您所见,我已将 -vx 添加到 sh 以查看可能出现的问题。但我找不到我做错了什么。

我认为可能是 scripts/sh/test-list 中的某些内容崩溃了,并打破了循环。如果是这种情况,我想知道发生了什么崩溃,并且我希望循环继续运行而不会中断。

你能给我指点吗?

【问题讨论】:

  • 你检查过 sort -r scripts/sh/test-list 的输出是?也许您可以将 sh -vx scripts/sh/test-web-task.sh 替换为 echo 并查看您的输出是否与 sort -r scripts/sh/test-list 相同。
  • 对不起,我已经做了那个测试。使用 echo 可以正常工作。

标签: bash grails loops break


【解决方案1】:
sh -vx scripts/sh/test-web-task.sh "$fn" < /dev/null

第二个脚本可能正在窃取原始脚本的标准输出和标准输入。让我知道这是否能解决问题

【讨论】:

  • 对不起,我不明白。您是否建议将 sh -vx scripts/sh/test-web-task.sh "$fn" 替换为 sh -vx scripts/sh/test-web-task.sh "$fn"
  • 您从主脚本运行的第二个脚本正在窃取标准输入和标准输出。由于第二个脚本在第一次运行后正常完成,因此它将退出主脚本,因此也不会显示任何错误。我会尝试找到我读到这篇文章的网站并添加另一条评论。
  • 完美运行。正如我在其他评论和作品中所要求的那样,我已经更换了。谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-10-04
  • 1970-01-01
  • 2014-10-31
  • 2012-03-22
  • 2018-09-07
  • 2016-01-30
  • 1970-01-01
相关资源
最近更新 更多