【问题标题】:automating install.sh script using an expect script使用期望脚本自动化 install.sh 脚本
【发布时间】: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 脚本中执行此操作,但就我而言,这更难,我宁愿有一个简单的迭代脚本来“匹配”输出并发送输入,对我来说似乎更简单。

我有两个基本问题。

  1. 在上面运行时,它似乎没有“触发” ./install.sh 脚本。没有什么?没有什么可匹配的?没有什么是 输出。
  2. 我需要以 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


【解决方案1】:
#!/bin/bash
.......
.......
expect -c "
spawn ./install.sh
expect \"Install the 5.1.0 package\? \(Q\|Y\|N\) \[Y\]\: \"
send \"Y\r\"
interact "
.......
.......

【讨论】:

  • 通过单引号期望脚本或使用quoted heredoc,您需要更少的转义。
  • 哦..谢谢伙计..这有很大帮助。确认我的理解..您会期望 -c ' (单引号)而不是双引号?
【解决方案2】:

与其专注于期望脚本,您可能会得到更好的帮助来显示安装脚本需要哪些输入。该解决方案可能就像在其标准输入上提供对 install.sh 的响应一样简单:

install.sh << END_OF_RESPONSES
Y
answer1
answer2
answer3
END_OF_RESPONSES

【讨论】:

  • 当然,我知道你要去哪里了。然而,我想主要目的是快速自动化安装,能够在 bash 中编写期望脚本(使用 Applescript shell 或驱动程序)。 Suku 描述的是主要问题的解决方案;不过,我很欣赏你的想法。
猜你喜欢
  • 2015-11-28
  • 2014-11-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-20
  • 1970-01-01
  • 2011-12-09
  • 1970-01-01
相关资源
最近更新 更多