Usando esperar para executar o script remoto e obter o status de saída do script

0

Eu tenho um script que está no servidor remoto, que retorna o status de saída do script. Agora quero executar esse script remoto usando o expect e obter o status de saída do script.

Meu script de servidor remoto

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

Meu script de espera no servidor local

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

Saída do script esperado

Test script

Mas também quero o status de saída do meu script remoto, por exemplo, 1. Como posso conseguir isso usando esperar.

    
por Huzefa 05.10.2017 / 12:36

1 resposta

1

Alguma chamada de sistema wait(2) (talvez em vez disso waitpid ou wait4 ; estes podem ou não ser a mesma página de manual dependendo do sabor do unix) obtém a palavra de status de saída. Em expect , isso é exposto por meio do procedimento wait documentado na página expect(1) man. Por exemplo, pode ser escrito um processo que saia com um código de saída aleatório do tipo psuedo e esse valor obtido do valor de retorno de 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

Isso quando executado deve produzir algo como

$ expect ./expectexitcode 
hi 78
700 ðӶ 0 78
78
$ 
    
por 05.10.2017 / 17:12