Я запускаю сценарий, который запрашивает ввод 'y' для каждой операции, я ищу решение, как $ ./script < echo 'yyyyyyyyyyyyyy'
передать все мои данные за один раз.
command-line
input
NewMrd
источник
источник
-f
опция работает хорошо с определенными командами.Ответы:
Существует команда, созданная специально для этого случая:
yes
Для этого нужно подключить выход
yes
к входу./script
. Поэтому, когда./script
пользователь запрашивает ввод, он вместо этого получает выводyes
. Результатомyes
является бесконечный поток, заy
которым следует символ новой строки. Так что в основном, как будто пользователь вводитy
для каждого вопроса./script
.Если вы хотите сказать нет (
n
) вместо да (y
), вы можете сделать это так:Обратите внимание, что некоторые инструменты имеют возможность всегда принимать
yes
ответ. См. Здесь, например: Обойти приглашение yes / no в 'apt-get upgrade'Другие способы ввода ввода:
Если вы точно знаете, сколько
y
ожидает ваш скрипт, вы можете сделать это так:Новые строки (
\n
) - это клавиши ввода.Используя
printf
вместоyes
вас более точный контроль ввода:Обратите внимание, что в некоторых редких случаях команда не требует, чтобы пользователь нажимал ввод после символа. в этом случае оставьте символы новой строки:
Для полноты вы также можете использовать здесь документ :
Или, если ваша оболочка поддерживает строку здесь :
Или вы можете создать файл с одним вводом на строку:
Если команда достаточно сложна и вышеописанных методов уже недостаточно, вы можете использовать функцию ожидаемо .
Вот пример очень простого сценария ожидания:
Технический придира:
Гипотетический вызов команды, который вы дали в своем вопросе, не работает:
Это потому, что грамматика оболочки позволяет оператору перенаправления в любом месте командной строки. Что касается оболочки, ваша гипотетическая командная строка такая же, как эта:
Это означает,
./script
что будет вызван с аргументом,'yyyyyyyyyyyyyy'
а стандартный ввод получит данные из файла с именемecho
. И Баш жалуется, так как файл не существует.источник
cannot enable tty mode on non tty input
. Знаете ли вы, как обойти это?printf
проделать трюк сrun
файлом, который мне нужен для автоматизации процесса установки, все, что происходит, это то, что я получаю сообщение об ошибкеWarning: Tried to connect to session manager, None of the authentication protocols specified are supported
, и скрипт открывается в новом терминале и просит меня ввести свой ввод вручную, как обычно. Кстати, это происходит в Debian. Какие-либо предложения?Используйте команду
yes
:Выдержка из справочной страницы:
источник
Некоторые вещи (
apt-get
например) принимают специальные флаги для запуска в тихом режиме (и принимают значения по умолчанию). Вapt-get
случае, вы просто передаете ему-y
флаг. Это полностью зависит от вашего сценария, хотя.Если вам нужны более сложные вещи, вы можете обернуть ваш сценарий в ожидаемый сценарий. Ожидаемый позволяет вам читать вывод и отправлять ввод, так что вы можете делать довольно сложные вещи, которые не позволят другие сценарии. Вот один из примеров со страницы в Википедии :
источник
.sh
сценарием оболочки, верно? Или есть способ?В сценарии оболочки вы также можете использовать следующий прием spawn, ожидайте и отправляйте
Однако в приведенном выше сценарии вам нужно будет указать фразу, которую вы ожидаете получить при выполнении сценария, для получения дополнительных примеров перейдите по следующей ссылке
Ожидать в Баш
источник
Ладно, это может быть не очень элегантное решение, но если вы напишите свои опции в отдельном файле, а затем передадите их в качестве входных данных для скрипта, это также сработает. Поэтому, если вы создаете новый файл со всеми вашими опциями (назовите этот файл «options.in»), вы можете легко запустить свой скрипт
./script.sh < options.in
и отредактировать / создать различные файлы опций по своему усмотрению.источник
options.in
файл? Можете привести пример?Я писал сценарий bash с Dialog, и мне нужно, чтобы это также происходило автоматически. Я сделал это, и это сработало как шарм.
источник
Вы можете вводить пользовательский ввод в ваш скрипт
cat
из текстового файла, переданного в ваш скриптbash
следующим образом:Просто поместите желаемый пользовательский ввод в ваш файл input.txt, независимо от того, какие ответы вы хотите - y, n, цифры, строки и т. Д.
источник