0

exec.shのようなbashスクリプトがあります

some command
expect test.exp
continue other command

test.exp ファイルには、次のようなスニペットがあります。

while {[gets $cmds command]>=0} {
  send "$command\r"
  expect {
    "*OK*" {puts $vout $command}
    "*fail*" {puts $iout $command}
    "*blocked*" { what should I put here????}
    }  
  }

だから私は中括弧に何かを入れて、実行がtest.expを終了し、bashスクリプトexec.shにシグナルを送るようにしたいので、exec.shも私の考えを終了させ、外部変数を設定し、exec.shで " if" ジャッジステートメント

何かアイデアはありますか?ありがとう!

4

1 に答える 1

2

Expect から終了ステータスを渡す

Tcl (したがって、Expect) にexitは、引数を取るコマンドがあります。引数は、プロセスの終了ステータスです。終了ステータスに意味を割り当て、シェルスクリプトから終了ステータスをテストするのはあなた次第です。たとえば、/ usr/ include /sysexits.h の値を使用すると、次のように記述できます。

expect {
  "blocked" { exit 69 }
}

次に、スクリプトでその値をテストします。

シェルの終了ステータスで分岐

最後のプロセスの終了ステータスは $? に格納されます。変数。これをテストする 1 つの方法は、case ステートメントを使用し、それに応じて分岐することです。例えば:

expect test.exp
case $? in
  69)
    # Handle the exit status, and then propagate the same exit status
    # from the shell script.
    echo 'service unavailable' > /dev/stderr
    exit 69
    ;;
esac
于 2012-12-22T18:12:49.777 に答える