scp se comporta de maneira diferente quando usado com o utilitário expect

5
expect -c 'spawn scp -C -o CompressionLevel=9 ~/partFiles/* [email protected]:/export/home/abc/; sleep 10; expect password; send "secretPassword\n";interact'

lança - ~/partFiles/*: No such file or directory

Apenas

scp -C -o CompressionLevel=9 ~/partFiles/* [email protected]:/export/home/abc/

no entanto, funciona perfeitamente.

Por quê? Como consertar isso?

    
por Chani 11.05.2015 / 16:25

2 respostas

4

Eu acho que o ~ e * são expandidos pelo shell, mas eu aposto esperar invocar scp diretamente, ignorando o shell para que eles não sejam expandidos. Você poderia tentar gerar o comando sh -c the scp .

Se for uma opção, também pode ser mais fácil compartilhar sua chave com o servidor, para que você não precise esperar por isso.

Usando a técnica sh , o comando ficará parecido com:

expect -c 'spawn sh -c "scp -C -o CompressionLevel=9 ~/partFiles/* [email protected]:/export/home/abc/"; sleep 10; expect password; send "secretPassword\n";interact'
    
por 11.05.2015 / 16:31
4

Uma alternativa à boa resposta de Eric: Tcl pode fazer a expansão glob

expect <<'END_EXPECT'
    set timeout -1      # use this instead of sleep
    set files [glob -nocomplain ~/partFiles/*]
    if {[llength $files]} {
        spawn scp -C -o CompressionLevel=9 {*}$files [email protected]:/export/home/abc/
        expect password
        send "secretPassword\r"
        expect eof
    }
END_EXPECT
    
por 11.05.2015 / 17:18