我有一些脚本,我一个接一个地执行停止和启动服务器。一些脚本将等待进入'按键返回提示。
如何通过将所有步骤添加到包含这些交互式脚本的单个shell脚本中来自动完成整个重启过程?
我无法找到使其成为非交互式的任何选项。
例如: $ ./webserver.sh start
服务器已启动(pid 16675)
日志文件位于:/ opt / webserver / logs
< 需要按回车 >
$
答案 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
进行安装。expect
。答案 1 :(得分:0)
man yes
命令可能是您需要的命令。请echo -ne '\n' | <your command>
查看更多详细信息。
或者您只想echo -ne '\n' | webserver.sh start
。例如{{1}}
答案 2 :(得分:0)