2013-01-15 129 views
1

我有一点,我似乎无法找出一个困惑,我敢肯定,这很容易实现自动化install.sh脚本..使用expect脚本

我有一个外部shell脚本,我们将其称为“install.sh”,用于安装我们公司开发的一款软件。我想使用expect(使用外部参数)自动执行install.sh过程,因为在输出字符串上对匹配进行模式匹配以及将一串参数传递给期望脚本的数组或参数非常容易。

不幸的是,网上的许多例子都是针对“scp”或“ftp”的,这些对我来说都不是很有趣,因为我试图自动化一个简单的安装脚本,而不是那些交互式shell, “脚本”。

下面是一个简单的例子想到我试图创建脚本:

# !/usr/bin/expect 
# passed arguments 
set domPassw [lindex $argv 1] 
set joinDomain [lindex $argv 2] 
set cdcVersion [lindex $argv 3] 
set domUser [lindex $argv 4] 

# cd over 
cd /Users/wqcoleman/Desktop/suite-mac10.6/; 

# start install 
spawn ./install.sh 

# first match 
expect "Install the 5.1.0 package? (Q|Y|N) [Y]:" 
send "Y\r" 

我敢肯定,我可以弄巧在这里和bash脚本内做到这一点,但是这是更难,因为就我而言,我宁愿有一个简单的迭代脚本来“匹配”输出并发送输入,这对我来说似乎更简单。

我有两个基本问题。

  1. 当上面运行时,它似乎不会“激发” ./install.sh脚本。什么也没有?没什么可比的?输出的内容不包括 。
  2. 我需要以root身份运行./install.sh脚本,并且当我最初启动这个时,我会产生一些 “高架”启动,它不会,所以我不知道该怎么办这里。

我要运行是这样的:

#!/bin/bash 
# Ask for the administrator password upfront 
sudo -v 

# Keep-alive: update existing `sudo` time stamp until `.update` has finished 
while true; do sudo -n true; sleep 60; kill -0 "$$" || exit; done 2>/dev/null & 

# cd over 
cd /Users/wqcoleman/Desktop/suite-mac10.6/; 

# start install 
spawn ./install.sh 

,然后擀成期待,但没有在所有的工作..所以我不知道从哪里开始,写bash脚本和通话期望里面?或者写一个期望脚本并在那里用提升的提示调用install.sh?

任何建议将是最有帮助的。

+0

不确定问题出在哪。希望与程序谈判,不管是ftp还是scp,都没有关系。 – pn8830

+0

它似乎没有“产卵”./install.sh脚本。它只是坐在那里。另外,我似乎无法弄清楚如何让./install.sh脚本在一个期望脚本中作为root运行。 –

+0

什么是您的操作系统? – pn8830

回答

3
#!/bin/bash 
....... 
....... 
expect -c " 
spawn ./install.sh 
expect \"Install the 5.1.0 package\? \(Q\|Y\|N\) \[Y\]\: \" 
send \"Y\r\" 
interact " 
....... 
....... 
+0

谢谢Suku,完美! –

+0

通过单引号期望脚本或使用[引用的heredoc](http://www.gnu.org/software/bash/manual/bashref.html#Here-Documents),您将不需要转义。 –

+0

哦..谢谢男人..这有助于很多。以确认我的理解..你会期望-c'(单引号)而不是双? –

1

您可能会更好地帮助显示安装脚本需要什么输入。解决方案可能很简单,只需提供对其stdin上的install.sh的响应即可:

install.sh << END_OF_RESPONSES 
Y 
answer1 
answer2 
answer3 
END_OF_RESPONSES 
+0

当然,我明白你要去的地方。然而,我猜想主要目标是以快速的方式自动化安装,并且能够在bash中使用脚本(使用Applescript shell或驱动程序)进行脚本编程。 Suku所描述的是解决主要问题的方法;不过,我很欣赏你的想法。 –