【发布时间】:2012-12-29 01:46:22
【问题描述】:
我有点困惑,我似乎无法弄清楚,我相信这很容易..
我有一个外部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 脚本中执行此操作,但就我而言,这更难,我宁愿有一个简单的迭代脚本来“匹配”输出并发送输入,对我来说似乎更简单。
我有两个基本问题。
- 在上面运行时,它似乎没有“触发” ./install.sh 脚本。没有什么?没有什么可匹配的?没有什么是 输出。
- 我需要以 root 身份运行 ./install.sh 脚本,并且 当我最初开始这个时,我认为 spawn 会有一些 “提升”开始,它没有,所以我不知道如何在这里做到这一点。
我打算运行这样的东西:
#!/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 ?
任何建议都会很有帮助。
【问题讨论】:
-
不确定问题是什么。期待与程序的对话,无论是 ftp 还是 scp,都没有关系。
-
它似乎没有“生成” ./install.sh 脚本。它只是坐在那里。此外,我似乎不太明白如何让 ./install.sh 脚本在期望脚本中以 root 身份运行。
-
MacOS 10.8 -- 我已经更新了这个问题。我同意,这有点“模棱两可”
标签: bash automation expect