Bash 使用expect脚本自动化install.sh脚本

Bash 使用expect脚本自动化install.sh脚本,bash,automation,expect,Bash,Automation,Expect,我有一点困惑,我似乎无法理解,我相信这很容易 我有一个外部shell脚本,我们称之为“install.sh”,用于安装我们公司开发的软件。我想使用expect(带有外部参数)自动化install.sh过程,因为很容易对输出字符串进行模式匹配,并将一组参数作为数组或参数传递给expect脚本 不幸的是,许多在线示例都是针对“scp”或“ftp”的,我对它们都不感兴趣,因为我正在尝试自动化一个简单的安装脚本,而不是那些交互式shell,而是一个“脚本” 下面是我尝试创建的一个简单expect脚本的示

我有一点困惑,我似乎无法理解,我相信这很容易

我有一个外部shell脚本,我们称之为“install.sh”,用于安装我们公司开发的软件。我想使用expect(带有外部参数)自动化install.sh过程,因为很容易对输出字符串进行模式匹配,并将一组参数作为数组或参数传递给expect脚本

不幸的是,许多在线示例都是针对“scp”或“ftp”的,我对它们都不感兴趣,因为我正在尝试自动化一个简单的安装脚本,而不是那些交互式shell,而是一个“脚本”

下面是我尝试创建的一个简单expect脚本的示例:

# !/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 inside?或者编写一个expect脚本并调用install.sh,其中包含提升的提示符


    任何建议都会很有帮助

    您可能会得到更好的帮助,显示安装脚本需要哪些输入,而不是关注expect脚本。解决方案可能非常简单,只需在其stdin上提供对install.sh的响应:

    #!/bin/bash
    .......
    .......
    expect -c "
    spawn ./install.sh
    expect \"Install the 5.1.0 package\? \(Q\|Y\|N\) \[Y\]\: \"
    send \"Y\r\"
    interact "
    .......
    .......
    
    install.sh << END_OF_RESPONSES
    Y
    answer1
    answer2
    answer3
    END_OF_RESPONSES
    

    install.sh您可能会得到更好的帮助,显示安装脚本需要哪些输入,而不是关注expect脚本。解决方案可能非常简单,只需在其stdin上提供对install.sh的响应:

    install.sh << END_OF_RESPONSES
    Y
    answer1
    answer2
    answer3
    END_OF_RESPONSES
    

    install.sh不确定问题是什么。期待与程序的对话,无论是ftp还是scp,都无关紧要。它似乎并没有“生成”。/install.sh脚本。它只是坐在那里。此外,我似乎不太明白如何在expect script.MacOS 10.8中以root用户身份运行./install.sh脚本——我已经更新了这个问题。。我同意,这有点“模棱两可”,不确定问题是什么。期待与程序的对话,无论是ftp还是scp,都无关紧要。它似乎并没有“生成”。/install.sh脚本。它只是坐在那里。此外,我似乎不太明白如何在expect script.MacOS 10.8中以root用户身份运行./install.sh脚本——我已经更新了这个问题。。我同意,这有点“模棱两可”当然,我明白你的意思了。不过,我想主要的目的是以一种快速的方式自动化安装,能够在bash中围绕expect编写脚本(使用Applescript shell或驱动程序)。Suku所描述的是主要问题的解决方案;不过,我很感激你的想法。当然,我知道你要去哪里。不过,我想主要的目的是以一种快速的方式自动化安装,能够在bash中围绕expect编写脚本(使用Applescript shell或驱动程序)。Suku所描述的是主要问题的解决方案;不过,我很欣赏你的想法。你只需引用expect脚本,或使用.oh.就可以减少逃避的次数。。谢谢你,伙计。。这很有帮助。为了证实我的理解。。您希望使用-c'(单引号)而不是双引号?通过单引号引用expect脚本或使用.oh.可以减少转义。。谢谢你,伙计。。这很有帮助。为了证实我的理解。。你会期望-c'(单引号)而不是双引号?