Использование ожидаю попробовать серию паролей
Я совершенно новичок в использовании "ожидаю" и совершенно не понимаю этого. Моя проблема в том, что я использовал "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
Это оставляет стандартный по умолчанию