예상을 사용하여 원격 스크립트를 실행하고 스크립트 종료 상태를 가져옵니다.

예상을 사용하여 원격 스크립트를 실행하고 스크립트 종료 상태를 가져옵니다.

스크립트의 종료 상태를 반환하는 원격 서버에 스크립트가 있습니다. 이제 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)시스템 호출( 유닉스 버전에 따라 동일한 매뉴얼 페이지일 수도 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
$ 

관련 정보