Linux 詹金斯可以';t完成执行一个";“虽然是真的”;环

Linux 詹金斯可以';t完成执行一个";“虽然是真的”;环,linux,bash,shell,ubuntu,jenkins,Linux,Bash,Shell,Ubuntu,Jenkins,我们正在使用一个自制的构建服务器(基于Ubuntu 12.04)构建一个嵌入式linux项目。通过ssh登录并执行执行执行必要构建内容的构建脚本,我们已经成功地使用了该服务器一段时间,没有出现任何问题 我们希望与jenkins一起自动化构建。实际上,我们认为这应该很容易,因为jenkins的工作只是调用构建脚本来完成这项工作 但是,它会失败,并永远挂在构建脚本中的某个while循环上。while循环如下所示(用于接受make config的默认建议) 文件:创建.sh #!/bin/sh [..

我们正在使用一个自制的构建服务器(基于Ubuntu 12.04)构建一个嵌入式linux项目。通过ssh登录并执行执行执行必要构建内容的构建脚本,我们已经成功地使用了该服务器一段时间,没有出现任何问题

我们希望与jenkins一起自动化构建。实际上,我们认为这应该很容易,因为jenkins的工作只是调用构建脚本来完成这项工作

但是,它会失败,并永远挂在构建脚本中的某个while循环上。while循环如下所示(用于接受make config的默认建议)

文件:创建.sh

#!/bin/sh
[... other stuff]
echo Configure project sources ...
(while true ; do echo ; done
) | make config_config >> $WORKDIR/project.log 2>&1
echo Debug output to see that this line is reached ...
[... other stuff]
create.sh是从另一个脚本(build.sh)调用的,而这个脚本又是从另一个脚本(比如simple build.sh)调用的。这是因为create.sh使用build.sh为特定生成环境设置的一些环境变量,simple-build.sh调用build.sh脚本为生成服务器设置环境。因此,构建器可以简单地登录并调用“simple build.sh”,而无需任何进一步的设置即可完成所有操作

如果从jenkins调用脚本,则控制台输出如下所示:

詹金斯控制台输出

[... other stuff]
Configure project sources ...
然后。。。它将永远挂起,直到在jenkins中手动中止该进程后才会结束。如果删除while循环,例如用一定量的sleep和echo来代替它以进入return,则它可以工作。但是,最好不要更改构建脚本(在脚本中多次使用相同的while循环方法..)

你知道为什么这个while循环会引起麻烦吗?这是while循环还是我们遗漏了其他内容?

因为yes正在工作,请在脚本中尝试“echo y”。我想你的品牌在期待着y,而你什么都没有通过

(while true ; do echo y; done
) | make config_config >> $WORKDIR/project.log 2>&1

谢谢

它与
yes'.
一起工作吗?是的,
yes
工作:D
(yes'.\make config| u config)>$WORKDIR/project.log 2>&1实际上可以工作。谢谢你。然而,为什么while不起作用呢?我不知道,但我猜while很难杀死
yes
是为该任务编写的,因此它的性能可能更好(当其标准输出关闭时退出?)。但是如果我是你,我会研究一种不使用任何一种方法的方法,例如,为
make config_config
设置一个变量以非交互方式运行。你正在运行无限while循环,这真的是你想要的吗?老实说,当我在这个(遗留)代码中偶然发现它时,我也对无限while循环感到好奇。然而,我认为while循环和yes循环都将在从第二个命令(make)接收到“断管”后立即终止,这将在make按预期终止时发生。为此,我的make配置实际上只接受输入新行,因为它将使用建议的默认设置。只有
yes
不起作用,它必须是
yes'