Использование ожидаю попробовать серию паролей

Я совершенно новичок в использовании "ожидаю" и совершенно не понимаю этого. Моя проблема в том, что я использовал "encfs" для защиты некоторых файлов некоторое время назад, и хотя я оставил себе текстовый файл, который содержал запутанные подсказки о пароле, я не могу вспомнить / угадать его. Итак, я почти уверен, что это одна из серии, возможно, сотни перестановок, и я подумал, что будет легко использовать, ожидаю попробовать их для меня. Пока что там тоже не повезло!

Я думаю, у ожидаемого есть язык сценариев, но я не вижу, где он определен (и я надеялся не изучать весь язык программирования только для этого!)

Во всяком случае, я создал этот сценарий с помощью copy-guess-and-fiddle:

#!/usr/bin/expect
set password [lindex $argv 0]
spawn echo Trying $password
spawn /usr/bin/encfs /home/simon/.safe /home/simon/safe
expect "Password: "
send "$password\r";
interact

Который проверяет один пароль и, кажется, работает, когда я использую его во вновь созданной системе Encfs. Однако затем я попытался запустить его для всех перестановок, которые я создал в файле под названием "попытки". Я сделал это с помощью другого скрипта:

#!/bin/bash

while read line
do
  echo trying $line
#  ./breakone.sh "$line"
  echo Status is $?
done < tries

(первый файл называется "breakone.sh"). Если я запускаю скрипт в показанной форме, он перебирает строки текста в файле "попытки". Но если я раскомментирую вызов ожидаемого сценария, он сразу же выпадет после ввода ожидающего сценария в первый раз. Кроме того, он выпадает сразу. Обычно ожидают, что сделают короткую паузу (возможно, ~ 1/2 секунды) и сообщат, что пароль неверный. Но при запуске из основного сценария он сразу возвращается к вызывающему сценарию (я знаю, что он возвращается к вызывающей программе, так как он печатает состояние, и итерация немедленно завершается.

Я предполагаю, что это как-то связано с тем, что ожидаемое "перехватило" стандартный ввод до такой степени, что цикл while больше не читает из файла, но я понятия не имею, куда идти дальше.

Любые предложения будут приветствоваться!

(Правка, я попытался перейти от чтения файла к использованию документа здесь, но это ничего не изменило).

1 ответ

Решение

Быстрое решение - использовать другой файловый дескриптор для цикла while:

while read line <&3
do
  echo trying $line
  ./breakone.sh "$line"
  echo Status is $?
done 3< tries

Это оставляет стандартный по умолчанию

Другие вопросы по тегам