0

システムへの pear のインストールが不足している場合に自動化するための小さなスクリプトに取り組んでいます。そして、それは私のためにそれを自分で行います。expect を使用するのはこれが初めてですが、期待したものではありません。

以下のサンプルコード:

 /usr/bin/expect <<EOD
          set timeout 20
          set number [lindex $argv 0]
          set path [lindex $argv 1]

 spawn php -q go-pear.phar
 expect "1-11, 'all' or Enter to continue:"
 send "$number\r"
interact
 expect "Installation base ($prefix) [/usr/local] :"
send "$path\r"
 interact
EOD

次のように最初のメニューの /usr/local 部分を入力しようとしているため、これは現時点ではうまく機能していません。

1-11, 'all' or Enter to continue: invalid command name "/usr/local"
    while executing
"/usr/local"
    invoked from within
"expect "Installation base () [/usr/local] :""

ここで私が見逃しているものを誰かに見せてもらえますか? また、これを取得したいので、 ./script $var0 $var1 として実行する必要はありませんが、すべてが含まれて入力されている ./script として実行するだけですが、方法がわかりませんそれ。

よろしくお願いいたします。

4

2 に答える 2

3

1 つの問題は[...]、文字列の内部がコマンドの実行を期待していることです。でエスケープする必要があると思います\[...\]

これが少し役立つことを願っています=)

于 2012-10-12T17:06:46.047 に答える
1

私はこれを理解することになりました。他の誰かが同様のことをしたい場合に備えて、これが私のために働いたものです:

 /usr/bin/expect <<EOF
set send_slow {1 .1}
set timeout -1   
 spawn php -q go-pear.phar
 expect "1-11, 'all' or Enter to continue:"
   sleep .1
 send -s -- "1\r"
 expect -exact "1\r"
   sleep .1
 send -s -- "/usr/local\r"
 expect -exact "/usr/local\r"
 expect "1-11, 'all' or Enter to continue:"
   sleep .1
 send -s -- "\r"
 expect -exact "\r"
 expect EOF
于 2012-10-12T17:01:23.967 に答える