Expect 유틸리티와 함께 ​​사용하면 scp 명령이 다르게 동작합니다.

Expect 유틸리티와 함께 ​​사용하면 scp 명령이 다르게 동작합니다.
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

관련 정보