2012-07-26 1055 views
8

我正在编写一些Linux shell脚本来移动一些代码,如果这些脚本可以交互的话,它会很好,很简单。Jenkins如何处理交互式Shell脚本?

缺点是我想在Jenkins中执行这些脚本中的一些,并且我不完全确定Jenkins如何处理脚本中的用户提示。我一直无法找到这方面的很多信息,也没有足够的资源来进行测试,所以我们将不胜感激。

谢谢你们

+0

您可能想查看[expect(1)](http://linux.die.net/man/1/expect)。 – 2012-07-26 16:38:43

+0

谢谢。我一直在使用期望,但做我想做的事似乎有一些奇怪的变通办法,我宁愿避免 – degausser 2012-07-26 17:22:24

+0

这是一个经典问题。互动的东西在人类呼叫者的有限意义上是很好的。但批处理的东西更适合自动化(脚本调用者)。我建议几乎所有的东西都是批量使用,除非你正在研究一个字处理器或其他东西,因为从长远来看,批处理脚本的高级可组合性最终会取得巨大的成功。这不仅仅是事实,你可以更实际地建立批处理脚本;使用批量接口进行自动化测试也更容易,所以代码更加可靠。 – user1277476 2012-07-26 17:18:42

回答

7

如果詹金斯执行命令期望输入,它只是坐在那里,等待输入。工作会挂起,你需要手动杀死它。处理这种情况的一种方法是将期望的输入输入到命令中,例如,

echo "input" | command 

command < file_with_input 
+0

感谢您的快速响应。我实际上正在尝试做一些类似'echo“的输入密码:”;阅读密码“并让用户即时输入密码。从上面说的(?) – degausser 2012-07-26 17:00:42

+1

看起来这是可以接受的。只有手动终止作业时,'read'才会被阻止。假设您将结果存储在环境变量中,则可以在Jenkins作业中相应地设置该变量,如果未设置该变量,则该脚本仅需要用户输入。 – 2012-07-26 17:03:15

+0

对不起,我应该更加明确。真正的命令是'scp',所以除非你使用expect,否则会强制提示。你说提示会“阻止”。我意识到它会停止进程并等待输入,但是用户能够在Jenkins内响应该提示吗? (如果你不知道的话,Jenkins noob的一点点) – degausser 2012-07-26 17:19:03