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