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/
しかし、完璧に動作します。
なぜ?この問題をどのように解決しますか?
答え1
私は考え~
てシェルによって拡張されますが、シェルをバイパスして直接呼び出され、拡張されないことを*
期待しています。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'
答え2
Ericの良い答えに代わるもの: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