6

スクリプトの次の行に進む前に、正確な文字列が一致するのを待機するようにスクリプトでコマンドを期待する方法を知りたいです。

Bourne シェル (sh) スクリプト:

#!/bin/sh
#!/usr/bin/expect

spawn ssh -Y localuser@lbblr-tirumala
expect -exact "localuser@lbblr-tirumala's password: "

# replace password with ur own passwd
send "geomax45\r"

# replace the prompt with ur own prompt
expect "localuser@lbblr-tirumala:~$ "

# run application
send "./sample\r"

expect "*Menu*\r
1. print hello world\r
2. print Bye world\r
3. quit\r
enter choice: "
# enter choice 1
send "1\r"
expect "Bye world\r
*Menu*\r
1. print hello world\r
2. print Bye world\r
3. quit\r
enter choice: $"
# enter choice 2
send "2\r"

上記のコードでは、1 を入力した後、「Bye world\r......」という文字列が画面に表示されるまで待機する必要があります。しかし、画面にはまったく異なる文字列が表示されますが、コードは次の行を実行し、オプション 2 を入力しています。expect コマンドの完全な文字列が一致するまで待機する必要があります。

正確な文字列の一致が発生するまで待機するように使用できる、より厳密なコマンドがあるかどうかを知りたいです。この問題で私を助けてください

4

1 に答える 1

8

スクリプトの早い段階で既に使用しています: expect -exact. しかし、一致する長い文字列は、問題を引き起こすことがほぼ保証されています。必要に応じて、複数のexpectコマンドに分割して、最短の一意の一致に切り詰める必要があります。

この場合、表示内容に基づいて、適切なコマンドはおそらくexpect -exact "choice:". しかし本質的に、可能なプログラム出力の完全な詳細がなければ、これを決定することはできません。

于 2012-04-09T10:07:31.183 に答える