Como redirecionar a saída para um log do comando expect

1

Eu tenho o seguinte código. Como posso redirecionar a saída do esperado para um arquivo de log para ver se o scp copiou tudo com êxito. Esta parte do meu código é executada em segundo plano.

    export L_SRC_SID L_SID MOUNT_POINT SERVICE_PASS APP_SERVER_1 SRC_MOUNT_POINT

    #And now transfer the file over
    /usr/bin/expect -c '
    set timeout -1
    cd /$env(MOUNT_POINT)/$env(L_SID)/apps
    spawn scp -pr apps$env(L_SRC_SID)@$env(APP_SERVER_1):/$env(SRC_MOUNT_POINT)/$env(L_SRC_SID)/apps/* .
    expect {
            yes/no { send yes\r ; exp_continue }
            password: { send $env(SERVICE_PASS)\r }
    }
    expect eof
    '
    
por Tapan Saha 12.07.2017 / 23:55

2 respostas

1

Basta redirecionar a saída da sua invocação de expect :

/usr/bin/expect -c '
set timeout -1
cd /$env(MOUNT_POINT)/$env(L_SID)/apps
spawn scp -pr apps$env(L_SRC_SID)@$env(APP_SERVER_1):/$env(SRC_MOUNT_POINT)/$env(L_SRC_SID)/apps/* .
expect {
        yes/no { send yes\r ; exp_continue }
        password: { send $env(SERVICE_PASS)\r }
}
expect eof
' >> /path/to/logfile 2>> /path/to/errorfile

Ou, se você quiser apenas capturar a saída de scp , redirecione somente a saída sua :

/usr/bin/expect -c '
set timeout -1
cd /$env(MOUNT_POINT)/$env(L_SID)/apps
spawn scp -pr apps$env(L_SRC_SID)@$env(APP_SERVER_1):/$env(SRC_MOUNT_POINT)/$env(L_SRC_SID)/apps/* . >> /path/to/logfile 2>> /path/to/errorfile
expect {
        yes/no { send yes\r ; exp_continue }
        password: { send $env(SERVICE_PASS)\r }
}
expect eof
'
    
por 13.07.2017 / 00:03
1

expect tem um procedimento log_file com um nome estranho que (drumroll ...) registra em arquivos para que você possa dizer apenas

#!/usr/bin/env expect
set timeout -1
log_file blah.log
...

dentro do código TCL. Veja log_file (e também log_user ) na página expect(1) man para detalhes.

    
por 13.07.2017 / 00:13