私は理解できないように見えるちょっとした困惑を持っています、そしてそれは簡単だと確信しています..
外部シェルスクリプトがあります。これを「install.sh」と呼びます。これは、当社が開発したソフトウェアをインストールするために使用されます。出力文字列でパターン マッチを行い、一連の引数を配列または引数として expect スクリプトに渡すのは非常に簡単なので、expect を使用して (外部引数を使用して) install.sh プロセスを自動化したいと考えています。
残念ながら、オンラインの例の多くは「scp」または「ftp」用であり、これらのどれも私にとって興味深いものではありません。なぜなら、私は単純なインストール スクリプトを自動化しようとしており、それらのインタラクティブ シェルではなく、「スクリプト」ではないからです。
作成しようとしている単純な期待スクリプトの例を次に示します。
# !/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スクリプト内でこれを行うことができると確信していますが、これは私に関する限り難しく、出力を「一致」させて入力を送信する単純な反復スクリプトが必要なようです。私にはもっと簡単です。
基本的な質問が 2 つあります。
- 上記を実行すると、./install.sh スクリプトが「実行」されないようです。何もない?一致するものはありませんか?何も出力されません。
- ./install.sh スクリプトを root として実行する必要があります。最初にこれを開始したとき、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
そして期待にロールインしますが、それはまったく機能しませんでした..だから、どこから始めて、bashスクリプトを書き、内部で期待を呼び出すべきかわかりませんか?または、期待するスクリプトを作成し、その中に昇格したプロンプトで install.sh を呼び出しますか?
どんな提案でも最も役に立ちます。