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
我认为~
和*
是由 shell 扩展的,但我敢打赌,expect 会scp
直接调用,绕过 shell,这样它们就不会被扩展。您可以尝试生成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