您可以在bash shell中使用分号来指定多个命令。 有时,其中一个命令弹出一个问题,需要用户输入。 (通常' y' /' n'或者其他什么) 如果我事先知道我想要回答什么,有没有办法以某种方式将它解析为命令,比如参数,或者一些奇怪的魔法管道东西?
答案 0 :(得分:2)
你不需要任何奇怪的魔法管道东西,而只需要一根烟斗。
./foo ; echo "y" | ./bar ; ./baz
如果您愿意,可以使用或神奇的herestring语法:
./foo ; ./bar <<<"y" ; ./baz
答案 1 :(得分:2)
您可以使用yes
命令将大量“y”放入管道。
例如,如果要删除所有文本文件,可以使用
yes | rm -r *.txt
导致rm提出的每个问题都被y回答。 如果您想要另一个默认答案,可以将其作为参数提供给是:
yes n | rm -r *.txt
这将输出'n'。
有关详细信息,请参阅http://en.wikipedia.org/wiki/Yes_(Unix)
答案 2 :(得分:2)
对于简单的&#34;是&#34;回答有一个命令yes,可在大多数Unix和Linux平台上使用:
$ yes | /bin/rm -i *
答案 3 :(得分:2)
首先,这不是bash弹出这些问题。它是被调用的特定程序(例如,cp -i在覆盖文件之前询问)。通常这些命令也有开关来回答问题,例如-y用于fsck,或-f如何覆盖-i in rm。许多程序可以通过管道来回答,这就是我们命令“是”的原因,但有些程序需要额外的长度以确保它们不能;例如,在询问密码时使用ssh。管道也没什么神奇之处。如果程序有时只提出一个问题,并且问题是什么问题,那么有一些专门为此设计的工具,例如“expect”。
在典型的shell脚本中,当您确切知道要输入的内容并且程序接受stdin上的输入时,您可以使用普通管道来处理它:
echo -e '2+2\n5*3' | bc
如果它是一个较长的部分,那么这里的文档可能会有所帮助:
bc <<EOF
2+2
3*5
EOF
答案 4 :(得分:1)
有时,命令会提供设置问题默认答案的选项。一个值得注意的例子是apt-get
- Debian / Ubuntu / Mint的包管理器。它提供了在非交互式脚本中使用的选项-y
,--yes
,--assume-yes
。