我有一个程序可以运行并询问用户某些问题。我想自动化它,以便每个问题都以No。
回复答案 0 :(得分:27)
yes no | <command>
<command>
是您要回答no
的命令。
(或yes n
,如果您确实需要输出n
)
默认情况下,yes
command会输出y
的连续流,以便对每个提示回答“是”。但是你可以传入任何其他字符串作为参数,以便它重复每个提示符。
作为pointed out by "just somebody",yes
实际上并未标准化。虽然它可以在我曾经使用的每个系统上使用(各种BSD,Mac OS X,Linux,Solaris,Cygwin),如果你以某种方式设法找到它没有的系统,以下应该可以工作:
while true; do echo no; done | <command>
或者作为yes
的完整shell脚本实现,您可以使用以下内容:
#!/bin/sh
if [ $# -ge 1 ]
then
while true; do echo "$1"; done
else
while true; do echo y; done
fi
答案 1 :(得分:5)
$ yes no
联机帮助页摘录:
$ 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.
...
答案 2 :(得分:3)
对于没有这种命令的系统,只需要一个简单的回声
echo "no" | command
重复,而不是那么难以制作一段时间/ for循环。
答案 3 :(得分:1)
以防您可能对某些可移植性感兴趣:是(1)是非标准,因为它没有在单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*/
}
答案 4 :(得分:0)
如果您发现yes
由于某种原因回答得太快,则可以使用@Brian Campbell回答的修改版来稍微减慢速度-每次重新填表之间会延迟0.1秒“否”一词
while true; do echo no; sleep 0.1s; done | <command here>