У меня есть программа, которая запускает и задает пользователям некоторые вопросы. Я хочу автоматизировать его, чтобы на каждый вопрос ответил 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*/
}