Como você está usando aspas duplas para o corpo do script de espera, você precisa lidar com a expansão da variável de shell both e com a expansão da variável expect (ou seja, Tcl). Quando o expect está sendo executado, a variável do shell foi expandida, portanto, espere ver isto:
expect password: { send some$value\r }
Então, agora, você precisa lidar com variáveis Tcl.
Você poderia adicionar mais citações:
/usr/bin/expect -c "
...
expect password: { send {$SERVICE_PASS}; send \r }
Mas isso não é necessário: Eu colocaria o script expect entre aspas simples e passaria os parâmetros do shell pelo ambiente. Dessa forma, cada variável só será substituída uma vez: no shell ou no expect, e você não terá nenhuma surpresa.
export L_SRC_SID L_SID MOUNT_POINT SERVICE_PASS APP_SERVER_1 SRC_MOUNT_POINT
/usr/bin/expect -c ' # <- single quote
set timeout -1
cd /$env(MOUNT_POINT)/$env(L_SID)/apps
spawn scp -pr * apps@$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
'
Em geral, o uso de sleep
em espera significa que você tem o tempo limite errado ou está esperando a coisa errada. Eu mudei os dois.