У меня есть программа, которая запускает и задает пользователям некоторые вопросы. Я хочу автоматизировать его, чтобы на каждый вопрос ответил No.
Как я всегда отвечаю "Нет" на приглашение с помощью bash script?
Ответ 1
yes no | <command>
Где <command> - это команда, на которую вы хотите ответить no на.
(или yes n, если вам действительно нужно просто вывести n)
Команда yes по умолчанию выводит непрерывный поток y, чтобы ответить да на каждое приглашение. Но вы можете передать любую другую строку в качестве аргумента, чтобы она повторила это для каждого приглашения.
Как отмеченный "только кем-то" , yes на самом деле не стандартизирован. Хотя он доступен для каждой системы, которую я когда-либо использовал (различные BSD, Mac OS X, Linux, Solaris, Cygwin), если вам как-то удается найти ту, в которой она не работает, должно работать следующее:
while true; do echo no; done | <command>
Или в качестве полнофункциональной оболочки script реализации yes вы можете использовать следующее:
#!/bin/sh
if [ $# -ge 1 ]
then
while true; do echo "$1"; done
else
while true; do echo y; done
fi
Ответ 2
На самом деле это выглядит забавно...
$ yes no
выдержки из manpages:
$ man yes
YES(1) BSD General Commands Manual YES(1)
NAME
yes -- be repetitively affirmative
SYNOPSIS
yes [expletive]
DESCRIPTION
yes outputs expletive, or, by default, ``y'', forever.
...
Ответ 3
для систем без такой команды, простое эхо должно работать
echo "no" | command
для повторений, не так сложно сделать цикл while/for, который продолжается вечно.
Ответ 4
на всякий случай, если вас может заинтересовать какая-то переносимость: yes (1) нестандартен тем, что он не описан в спецификации Single Unix (POSIX другим именем). но он довольно портативен в любом случае (см. пункт "ИСТОРИЯ", жалость. MYYN не цитирует все это):
YES(1) FreeBSD General Commands Manual YES(1)
NAME
yes — be repetitively affirmative
SYNOPSIS
yes [expletive]
DESCRIPTION
The yes utility outputs expletive, or, by default, "y", forever.
HISTORY
The yes command appeared in Version 32V AT&T UNIX.
FreeBSD 9.0 June 6, 1993 FreeBSD 9.0
изменить
если вы попадаете в нечетную систему, которая не реализует эту команду, тривиально ее предоставить. это из FreeBSD-9:
int
main(int argc, char **argv)
{
if (argc > 1)
while (puts(argv[1]) != EOF)
;
else
while (puts("y") != EOF)
;
err(1, "stdout");
/*NOTREACHED*/
}