Como usar 'esperar' com 'zipcloak'?

2

Eu crio um arquivo zip usando zip , que inclui vários arquivos e diretórios, denominados test.upd . Agora quero usar expect para manipular automaticamente a criptografia de senha. Aqui estão dois scripts bash, ambos não funcionam:

!/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
                                    }
    }'

e este arquivo:

!/bin/bash
MYPWD="mypassword"

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

    }'

Eu também tentei criar um script expect diretamente:

#!/usr/bin/expect -f

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

Todos os scripts parecem enviar corretamente a primeira solicitação de senha, mas parece que o texto da segunda entrada de senha nunca é solicitado. Como posso fazer isso certo?

Restrições:

  • preciso usar zipcloak (NÃO zip )
  • Eu quero usar expect para definir a senha automaticamente.

Observações:

  • usei o script correto
  • Cada vez que, ao usar o primeiro script, um arquivo vazio começando com zi é criado no diretório, como ziSvbYhy ou zi3gzEQ4 .
por Alex 25.11.2013 / 21:21

2 respostas

1

A solução parece ser esperar algum tempo antes das ações! Eu não tenho absolutamente nenhuma idéia do porquê disso (comentários, explicações e insights são bem-vindos), mas o script a seguir funciona agora para mim:

#!/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
    '
    
por 26.11.2013 / 07:55
0

O primeiro exemplo da pergunta funcionou para mim.

!/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
                                }
}'

Embora o segundo não. Tente novamente, talvez você esteja executando o script errado. Isso muitas vezes acontece comigo: eu me pergunto por que isso não funciona, mas estou executando o script errado.

    
por 26.11.2013 / 00:19

Tags