Имитация нажатия клавиши ENTER в скрипте bash

48

Я создал действительно простой bash script, который запускает несколько команд. одна из этих команд требует ввода пользователя во время выполнения. то есть спрашивает пользователя "хотите ли вы blah blah blah?", я хочу просто отправить вводное нажатие на это, чтобы script полностью автоматизировался.

Мне не нужно ждать ввода или чего-либо во время выполнения, достаточно его просто отправить нажатие клавиши, и буфер ввода будет обрабатывать остальные.

  • 1
    Если вы пытаетесь автоматизировать инструмент apt-get , правильное решение состоит в том, чтобы предварительно заполнить базу данных debconf вашими предпочтительными значениями; тогда это не спросит вас.
Теги:

5 ответов

79
Лучший ответ
echo -ne '\n' | <yourfinecommandhere>

или воспользовавшись неявной новой строкой, которую генерирует эхо (спасибо Marcin)

echo | <yourfinecommandhere>
  • 0
    если вы 5c6e этот вывод в xxd вы получите 5c6e hex, который является литералом \n . если вы просто делаете echo | xxd вы на самом деле заканчиваете с гексом 0a . Так что, я думаю, используйте то, что нужно вашей программе.
  • 3
    @Marcin, я удивлен, я получаю 0a0a что все еще не так, как задумано, добавление -n исключает неявный перевод строки. Но ты, конечно, прав, откровенное echo | ... отлично работает здесь. Буду обновлять мой ответ.
Показать ещё 7 комментариев
25

Вы можете найти полезную команду yes.

См. man yes

  • 40
    yes я нахожу это полезным.
  • 2
    Это имитирует повторное нажатие клавиши «y» вместо нажатия клавиши «Ввод». Хотя это, вероятно, то, что вы хотите, чтобы ответить да / нет, это не сработает ни для чего, кроме «y».
Показать ещё 2 комментария
12

Ниже приведен пример использования expect:

#!/usr/bin/expect
set timeout 360
spawn my_command # Replace with your command.
expect "Do you want to continue?" { send "\r" }

Проверьте: man expect для получения дополнительной информации.

  • 0
    особенно полезно, если нужно отправить несколько нажатий клавиш
9

Вы можете использовать expect (man expect поставляется с примерами).

7

Вы можете просто использовать yes.

# yes "" | someCommand

Ещё вопросы

Сообщество Overcoder
Наверх
Меню