【问题标题】:Shell: write a script that gets executed on stdin waitShell:编写一个在标准输入等待时执行的脚本
【发布时间】:2016-07-30 01:12:02
【问题描述】:

我有这个命令 command 在某个时候返回:Press Enter to continue

我想编写一个调用command 的脚本,读取到目前为止的命令输出,在Press Enter to continue 到达时对其进行处理,并在完成时模拟回车键。

我有机会做到这一点吗? :-D

类似:

myscript | command > output

myscript

#!/bin/bash

cp output output2 # output2 should only contain the output until Press Enter to continue
echo -ne '\n'

除了它不起作用! :-)

【问题讨论】:

  • echo -ne '\n' 非常奇怪。这实际上与echo 相同,只是便携性降低,打字和阅读更多。
  • 那说这个尝试行不通怎么办?它不确认提示吗?提示是从标准输入还是直接从 tty 读取?我也不太了解输出文件。您想在“按回车”之前复制输出文件吗?
  • 寻找关于expect 程序的教程? (并且不清楚“我有这个命令> command”是什么意思。> 是 cmd 提示符吗?如果是这样,你不需要包含它。如果意味着指示文件重定向,你正在创建,或清除当前目录中的文件command)。请尝试制作一个小型的、可重复的测试用例,我们可以遵循。祝你好运。
  • echo -ne '\n' 来自therecp output output2 只是一个例子,我实际上会 sed 一些东西并从中创建另一个文件。是的> 是命令提示符,我删除了它!我的示例实际上工作正常,只是它没有在Press Enter to continue 之前收到输入,这我需要的...我尝试添加一些sleep,但没有成功...

标签: bash shell


【解决方案1】:

理想情况下,您应该使用expect 命令来实现这一点,示例代码:

#!/usr/bin/expect
set timeout 600
spawn command
expect "Press Enter to continue" { send "\r" }

注意:将command 替换为您的命令。

然后将其保存到脚本中,使其可执行并运行它。

查看:man expect 了解更多信息。

在 OS X 上通过以下方式安装:brew install expect

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-06-10
    • 1970-01-01
    • 2016-05-23
    • 2015-02-27
    • 2014-02-22
    • 2017-02-15
    • 1970-01-01
    相关资源
    最近更新 更多