当需要按键返回提示时,BASH脚本调用新脚本

时间:2015-12-07 03:10:59

标签: linux bash shell

我有一些脚本,我一个接一个地执行停止和启动服务器。一些脚本将等待进入'按键返回提示。

如何通过将所有步骤添加到包含这些交互式脚本的单个shell脚本中来自动完成整个重启过程?

我无法找到使其成为非交互式的任何选项。

例如: $ ./webserver.sh start

服务器已启动(pid 16675)

日志文件位于:/ opt / webserver / logs

< 需要按回车 >

$

3 个答案:

答案 0 :(得分:1)

如果它真的就像每个调用的脚本 Enter 一样简单,那么您需要做的就是通过stdin发送换行符; e.g:

testScript的内容:

#!/usr/bin/env bash

read -p 'Press Enter to continue: '

echo 'Continuing...'

调用testScript并自动回答提示:

testScript <<<''

您应该会看到输出Continuing... - <<<''只是将\n发送到testScript的标准输入(使用here-string,它会自动终止输入带有\n的字符串,因此会在此处有效地发送\n,以回答提示。

应用于您的示例命令,我们得到:

./webserver.sh start <<<''

(Here-strings(<<<)是非标准的Bash扩展(Ksh和Zsh也支持);符合POSIX的替代方案是:

printf '\n' | ./webserver.sh start

对于更复杂的互动,请使用expect utility ,它使用(基于TCL的)脚本语言来模拟与交互式脚本的互动。

  • expect在大多数Linux平台上预先安装 ,但相应的软件包经理可能会提供它;例如,在基于Debian的平台(如Ubuntu)上,运行sudo apt-get expect进行安装。
  • OS X,相比之下, 预先安装了expect

答案 1 :(得分:0)

man yes命令可能是您需要的命令。请echo -ne '\n' | <your command>查看更多详细信息。

或者您只想echo -ne '\n' | webserver.sh start。例如{{1}}

答案 2 :(得分:0)

您可以尝试将bash脚本包装在expect脚本中。

这里有一些基本的例子。

http://www.thegeekstuff.com/2010/10/expect-examples/