我们有一个shell脚本,它希望在提示时输入多个用户输入。例如一开始它可能要求执行操作。当给出这个答案时,它可能会要求输入用户名,然后输入密码等。我们希望通过使用文件重定向提供输入来自动执行此任务,即。脚本
您可以发布脚本的相关部分和输入文件的第一行吗?
有问题的脚本调用它们请求用户输入的内部脚本。我看不到那些内部脚本。但系统会提示如下:"输入要执行的操作"。当用户输入此操作时,将再次提示用户-"输入用户名"。我已经尝试了标准文件重定向,但它不起作用。
我们不知道如何改变我们看不见的东西。显示脚本。
内部脚本可能在读取之前发出fflush(stdin),这将导致出现问题。期望推荐是一个很好的建议。
您可以使用的是程序expect。为它创建一个脚本,告诉它什么时候给它执行的某个命令输入什么。通过这种方式,你可以完全自动化你正在挣扎的事情。
更多关于谷歌和这里的信息:
http://www.linuxjournal.com/article/3065
手册页:http://linux.die.net/man/1/expect
感谢大家的评论和回答。我试过了,但是没用。所以我要提到什么对我们有用。这是我们的工作流程-1。在Linux提示下,键入命令,在我们的例子中是connect()。2。一旦给出了该命令,脚本就会请求该命令的参数,如端口号、服务器等。我们必须手动提供该参数3。然后我们再次看到一个shell提示和另一个输入。在我们的例子中,我们可以使用文件重定向在提示符处提供第一个命令connect(),但是参数传递是一个问题。我们找到的解决方案是只在connect的括号内提供参数,即重定向的输入文件将包含-connect()。这对我们有用。
你说"它只读取输入的第一行"。
所以你必须杀了剧本?
是否有输出?(特别是错误信息)?
是否将stderr重定向到/dev/null或其他位置?如果是这样的话,就去掉它。
这是高概率助手…修改顶级脚本,在第2行添加set -vx。然后,您将能够看到处理的内容、停止的位置,并可能制定有关为什么不处理数据的理论。
有没有可能输入文件是在Windows环境中创建的,而CR-LF对会弄乱预期的输入?
我希望这有帮助。