Unix AIX는 예상하고 생성할 변수와 매개변수를 전달합니다.

Unix AIX는 예상하고 생성할 변수와 매개변수를 전달합니다.

나는 대본을 쓰고 있어요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
}

관련 정보