"zipcloak"과 함께 "expect"를 어떻게 사용하나요?

"zipcloak"과 함께 "expect"를 어떻게 사용하나요?

이를 사용 하여 이라는 여러 파일과 디렉터리가 포함된 zip파일을 만듭니다 . 이제 자동 처리로 비밀번호 암호화를 처리하려고 합니다 . 다음은 두 개의 bash 스크립트이며 둘 다 작동하지 않습니다.ziptest.updexpect

!/bin/bash

MYPWD="mypassword"

expect -c '
    spawn zipcloak test.upd
    expect {
       "*Enter password*" { send "'"$MYPWD"'\r"
                                   exp_continue
                                  }
       "*Verify password*" { send "'"$MYPWD"'\r"
                                      exp_continue
                                    }
    }'

그리고 이 파일은:

!/bin/bash
MYPWD="mypassword"

expect -c '
    spawn zipcloak test.upd
    expect "*Enter password*" 
    send "'"$MYPWD"'\r"
    expect "*Verify password*" 
    send "'"$MYPWD"'\r"

    }'

또한 직접 스크립트를 작성해 보았습니다 expect.

#!/usr/bin/expect -f

spawn zipcloak test.upd
expect "*Enter password*" 
send "password\r"
expect "*Verify password*" 
send "password\r"

모든 스크립트는 첫 번째 비밀번호 요청을 올바르게 보내는 것 같지만 두 번째 비밀번호 항목의 텍스트를 요청하지 않는 것 같습니다. 어떻게 하면 바로잡을 수 있나요?

제한 요인:

  • zipcloak나는 (가 아닌 zip) 을 사용해야 한다
  • expect자동 비밀번호 설정을 사용하고 싶습니다 .

논평:

  • 올바른 스크립트를 사용했습니다.
  • 첫 번째 스크립트를 사용할 때마다 , 또는 zi로 시작하는 디렉토리에 빈 파일이 생성됩니다 .ziSvbYhyzi3gzEQ4

답변1

해결책은 조치를 취하기 전에 잠시 기다리는 것 같습니다! 왜 이런 일이 발생하는지 전혀 알 수 없지만(의견, 설명 및 통찰력 환영) 다음 스크립트는 현재 저에게 효과적입니다.

#!/bin/bash
MYPWD="mypassword"

expect -c ' 
    spawn zipcloak test.upd
    expect "*Enter password*" 
    sleep 1
    send  "'"$MYPWD"'\r"
    sleep 1
    expect "*Verify password*" 
    sleep 1
    send  "'"$MYPWD"'\r"
    sleep 1
    '

답변2

내 해석은 Alex와 ctrl-alt-delor의 답변이 zipcloak 프로세스가 완료될 때까지 제대로 기다리지 않으므로 zip 파일을 암호화되지 않은 상태로 쉽게 남겨 둡니다(그리고 zimfwtpJ다음과 같은 이름의 임시 파일을 남깁니다). 따라서 해당 코드는 작은 zip 파일에서는 제대로 작동하지만 더 큰 zip 파일에서는 작동하지 않습니다.

이것이 내 해결책입니다.

#!/bin/bash
MYPWD="mypassword"

expect -c '
    set timeout -1
    spawn zipcloak test.upd
    expect "*Enter password*"
    send  "'"$MYPWD"'\r"
    expect "*Verify password*"
    send  "'"$MYPWD"'\r"
    expect eof
    '

답변3

질문의 첫 번째 예가 저에게 효과적이었습니다.

!/bin/bash
MYPWD="mypassword"

expect -c '
     spawn zipcloak test.upd
     expect {
        "*Enter password*" { send "'"$MYPWD"'\r"
                               exp_continue
                              }
        "*Verify password*" { send "'"$MYPWD"'\r"
                                  exp_continue
                                }
}'

두 번째는 그렇지 않았지만. 다시 시도해 보세요. 잘못된 스크립트를 실행했을 수도 있습니다. 이런 일이 항상 발생합니다. 왜 작동하지 않는지 알고 싶지만 잘못된 스크립트를 실행하고 있습니다.

관련 정보