如何使用bash脚本始终对任何提示回答否?

gpo*_*pow 13 bash

我有一个程序运行并询问用户某些问题.我想自动化它,以便每个问题都回答.

Bri*_*ell 29

yes no | <command>
Run Code Online (Sandbox Code Playgroud)

<command>您要回答的命令在哪里no.

(或者yes n如果你真的需要输出一个n)

默认情况下,该yes命令输出连续的流y,以便对每个提示回答"是".但是你可以传入任何其他字符串作为参数,以便它重复每个提示.

作为由"只是有人"指出,yes实际上不规范.虽然它可用于我曾经使用的每个系统(各种BSD,Mac OS X,Linux,Solaris,Cygwin),如果你以某种方式设法找到它没有的系统,以下应该可以工作:

while true; do echo no; done | <command>
Run Code Online (Sandbox Code Playgroud)

或者作为一个完整的shell脚本实现yes,您可以使用以下内容:

#!/bin/sh

if [ $# -ge 1 ]
then
    while true; do echo "$1"; done
else
    while true; do echo y; done
fi
Run Code Online (Sandbox Code Playgroud)

  • @ Cort3z当您将输出管道停止时,它将停止; 因此,如果该命令询问5个问题,从而读取5个答案,则"是"命令将打印出5行.因此,您可以使用包含多个这些命令的bash脚本,它将按预期工作. (2认同)

mik*_*iku 5

实际上,它看起来很有趣......

$ yes no
Run Code Online (Sandbox Code Playgroud)

联机帮助页摘录:

$ 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.

...
Run Code Online (Sandbox Code Playgroud)


gho*_*g74 5

对于没有此类命令的系统,只需简单的 echo 即可

echo "no" | command
Run Code Online (Sandbox Code Playgroud)

对于重复,制作一个永远持续的 while/for 循环并不难。