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/
ただし、完全に機能します。
どうして?これを修正するには?
私は思います ~
および*
はシェルによって展開されますが、scp
を直接呼び出し、シェルをバイパスしてそれらが展開されないことを期待します。スポーンを試すことができますsh -c
scp
コマンド。
オプションの場合は、キーをサーバーと共有する方が簡単な場合もあるため、これをまったく期待する必要はありません。
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'
エリックの良い答えの代替: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