web-dev-qa-db-ja.com

scpコマンドをexpectユーティリティと併用すると動作が異なります

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

スロー-~/partFiles/*: No such file or directory

ただ

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

ただし、完全に機能します。

どうして?これを修正するには?

5
Chani

私は思います ~および*はシェルによって展開されますが、scpを直接呼び出し、シェルをバイパスしてそれらが展開されないことを期待します。スポーンを試すことができますsh -cscpコマンド。

オプションの場合は、キーをサーバーと共有する方が簡単な場合もあるため、これをまったく期待する必要はありません。

shテクニックを使用すると、コマンドは次のようになります。

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

エリックの良い答えの代替:Tclはグロブ拡張を行うことができます

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
4
glenn jackman