予測を使用してリモートスクリプトを実行し、スクリプト終了ステータスを取得します。

予測を使用してリモートスクリプトを実行し、スクリプト終了ステータスを取得します。

スクリプトの終了ステータスを返すリモートサーバーにスクリプトがあります。 Expectを使用してこのリモートスクリプトを実行し、スクリプトの終了ステータスを取得したいと思います。

私のリモートサーバースクリプト

 #!/usr/bin/ksh
 echo "Test script"
 exit 1

ローカルサーバーの私の予想スクリプト

#!/usr/bin/ksh
expect -c "
log_user 0
spawn ssh abc@abc /var/tmp/test.ksh
expect { password:test }
log_user 1
expect 100%
"

スクリプトの出力を期待します。

Test script

しかし、リモートスクリプトの終了状態である1も欲しいです。これを達成するためにどのように予測を使用できますか?

ベストアンサー1

特定wait(2)のシステムコール(Unixのバージョンによっては同じマニュアルページでも、waitpidそうでない場合もあります)は終了ステータスワードを取得します。wait4これは、マニュアルページに記載されている手順expectで公開されます。たとえば、擬似乱数終了コードで終了するプロセスを作成できます。その値はの戻り値から取得されます。waitexpect(1)wait

#!/usr/bin/env expect

spawn -noecho \
  expect -c {set code [expr { int(100*rand()) }]; puts "hi $code"; exit $code}
expect -ex "hi"
expect eof

set exunt [wait -i -1]
puts $exunt

set child_exit_code [lindex $exunt end]
puts $child_exit_code

実行時に同様の結果を生成する必要があります。

$ expect ./expectexitcode 
hi 78
700 ðӶ 0 78
78
$ 

おすすめ記事