我有点遗憾,我似乎无法弄清楚,我确信这很容易......
我有一个外部shell脚本,我们称之为“install.sh”,用于安装我们公司开发的软件。我想使用expect(使用外部参数)自动化install.sh进程,因为在输出字符串上模式匹配并传递一堆参数非常容易,无论是作为数组还是参数到expect脚本。
不幸的是,许多在线示例都是针对“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脚本中执行此操作,但就我而言,这更难,我宁愿有一个简单的迭代脚本“匹配”输出并发送输入,对我来说似乎更简单。
我有两个基本问题。
我打算运行这样的事情:
#!/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
然后滚动到expect,但是这并没有全部工作..所以我不知道从哪里开始,写一个bash脚本并调用期望内部?或编写一个expect脚本并在其中调用带有提升提示的install.sh?
任何建议都会有所帮助。
答案 0 :(得分:3)
#!/bin/bash
.......
.......
expect -c "
spawn ./install.sh
expect \"Install the 5.1.0 package\? \(Q\|Y\|N\) \[Y\]\: \"
send \"Y\r\"
interact "
.......
.......
答案 1 :(得分:1)
您可以更好地帮助显示安装脚本所需的输入,而不是专注于expect脚本。解决方案可能就像在stdin上提供对install.sh的响应一样简单:
install.sh << END_OF_RESPONSES
Y
answer1
answer2
answer3
END_OF_RESPONSES