나는 대본을 쓰고 있어요SCP일부 파일이지만 파일 위치는 사용자나 다른 스크립트에 의해 매개변수로 전달되어야 합니다.
#!/usr/bin/expect
set FILEPATH1 $1
spawn sh "scp $FILEPATH1 $USER@$HOST:/destination/files"
set pass "pass123"
expect {
password: {send "$pass\r"; exp_continue}
}
또한 빌드하기 전에 이것을 시도하고 #!/usr/bin/expect
FILEPATH1=$1
답변1
이것은 당신이 원하는 것을 수행하지 않습니다:
set FILEPATH1 $1
$1, $2, ...
Tcl(및 예상)은 명령줄 인수에 액세스하기 위해 쉘 스타일 방식을 사용하지 않습니다 . 전역 목록을 사용하고 싶습니다 $argv
.
set FILEPATH1 [lindex $argv 0]
또한 빌드 호출이 올바르지 않습니다. sh
다음을 찾을 것이다문서이름은 "scp $FILEPATH1 $USER@$HOST:/destination/files"입니다. scp를 생성하는 데 쉘이 필요하지 않습니다.
spawn scp $FILEPATH1 $USER@$HOST:/destination/files
이제 USER와 HOST는 어디에서 왔습니까? 환경변수인가요? 만일이 경우라면:
spawn scp $FILEPATH1 $env(USER)@$env(HOST):/destination/files
또한 스크립트가 종료되기 전에 전송이 실제로 완료될 때까지 기다릴 필요가 없습니다. 이 작업을 수행:
expect password:
send "$pass\r"
set timeout -1
expect eof
비밀번호를 한 번만 입력하라는 메시지가 표시된다고 가정합니다. 여러 번 입력해야 하는 경우
expect {
password: {
send "$pass\r"
set timeout -1
exp_continue
}
eof
}