Подтвердить что ты не робот

Как я всегда отвечаю "Нет" на приглашение с помощью bash script?

У меня есть программа, которая запускает и задает пользователям некоторые вопросы. Я хочу автоматизировать его, чтобы на каждый вопрос ответил No.

4b9b3361

Ответ 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*/
}