スクリプトの終了ステータスを返すリモートサーバーにスクリプトがあります。 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
で公開されます。たとえば、擬似乱数終了コードで終了するプロセスを作成できます。その値はの戻り値から取得されます。wait
expect(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
$