команда bash для многократной эмуляции нажатия клавиш в процессе - PullRequest
3 голосов
/ 24 февраля 2010

The nmap инструмент имеет такую ​​функцию - когда вы выполняете сканирование [#nmap -A -T4 localhost] и нажимаете «Enter» - он отображает вид информации о состоянии «Время: около 6,17% выполнено»

Вопрос - как заставить это нажатие клавиши повторяться, не касаясь клавиатуры в оболочке Bourne?

ps: просто пытаюсь найти обходной путь для ошибки в функции php proc_open, когда stdout процесса возвращается только после закрытия канала stdout, и эмуляция pty php не работает на fbsd.

Вопрос закрыт. Проблема решена с помощью утилиты «ожидаемо»

#!/usr/local/bin/expect

spawn /usr/local/bin/nmap -A -T4 -p 21-100 localhost
expect arting {sleep 3; send \r}
while {1} {
        expect eof {
            send_user "finished\n";
            exit;
        } "done;" {
            sleep 3;
            send \r;
            continue;
        }

}

Ответы [ 3 ]

3 голосов
/ 24 февраля 2010

Наверное, проще всего использовать expect.

1 голос
/ 26 февраля 2010

Обратите внимание, вы можете избавиться от бесконечного цикла:

spawn /usr/local/bin/nmap -A -T4 -p 21-100 localhost
expect arting {sleep 3; send \r}
expect {
    "done;" {
        sleep 3
        send \r
        exp_continue
    }
    eof
}
puts "finished"

Вы уверены, что вам нужны sleep с? Их обычно можно избежать, используя -regexp, совпадающее с командой expect.

Полезный совет Ожидайте: во время разработки используйте exp_internal 1, чтобы подробно увидеть, как ваши шаблоны соответствуют выводу команды.

1 голос
/ 24 февраля 2010

Возможно, лучшая программа «да, человек» сделает то, что вам нужно - программа называется «да» и многократно генерирует одну и ту же строку ввода снова и снова.

yes ok | recalcitrant.php 

Это будет отправлять 'ok' плюс перевод строки на непокорный PHP. Он ограничен скоростью, с которой принимающая программа считывает свои входные данные. Он доступен в утилитах GNU и на большинстве других платформ на основе Unix.

Если вам требуется какой-либо интеллект в обработке, тогда на основе Tcl ' ожидайте '

...