「zipcloak」と一緒に「expect」をどのように使用しますか?

「zipcloak」と一緒に「expect」をどのように使用しますか?

これを使用して、という名前の複数のファイルとディレクトリを含むzipファイルを作成します。今、自動処理でパスワード暗号化を処理しようとしています。以下は2つの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"

すべてのスクリプトは最初のパスワード要求を正しく送信しているようですが、2番目のパスワードエントリのテキストを要求していないようです。どうすれば修正できますか?

制限要因:

  • 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
                                }
}'

二つ目はそうではありませんでしたが。もう一度お試しください。間違ったスクリプトを実行した可能性があります。これはいつも起こります。なぜ動作しないのか知りたいのですが、間違ったスクリプトを実行しています。

関連情報