编写一个能回答交互式提示的Bash脚本


简介

交互式提示是许多Linux命令行工具和实用程序的常见功能。这些提示允许用户提供输入或进行选择以继续执行任务。虽然交互式提示在某些情况下很有用,但在运行脚本或自动化任务时也可能很麻烦。在这些情况下,了解如何自动回答交互式提示可能很有帮助。

处理交互式提示

有多种方法可以自动回答Linux中的交互式提示。一种方法是使用expect命令,这是一种专门用于自动化交互式程序的脚本语言。另一种方法是使用echo命令将响应作为输入发送到交互式提示。yes命令也可以用来发送重复的响应,例如“yes”,到交互式提示。最后,一些程序提供命令行选项来完全禁用交互式提示。

使用expect命令

Expect是一个命令行工具,可用于自动化交互式提示和其他需要用户输入的任务。Expect的工作原理是将输入发送到命令并等待返回特定的模式或字符串。当检测到匹配的模式时,Expect可以采取预定的操作,例如发送更多输入或执行命令。

要在bash脚本中使用Expect,您需要在系统上安装它。在大多数Linux发行版上,可以使用包管理器安装Expect。例如,在基于Debian的系统上,可以使用以下命令:

示例

$ sudo apt-get install expect

安装Expect后,您可以通过在bash脚本中包含expect命令以及您要运行的命令和要发送的输入来使用它。例如,以下脚本使用Expect安装包并响应提示:

示例

#!/usr/bin/expect
spawn apt-get install package-name
expect "Do you want to continue? [Y/n]"
Write a Bash Script that Answers Interactive
Prompts
send "Y\r"
expect "Enter your password:"
send "mypassword\r"
interact

spawn命令用于运行apt-get install命令,expectsend命令用于处理提示。interact命令允许脚本继续运行直到进程完成。

以下是运行此脚本时可能会看到的输出示例:

示例

Do you want to continue? [Y/n] Y
Enter your password: mypassword

Expect是处理交互式提示的强大工具,但使用起来可能有点复杂,尤其是在执行更高级的任务时。对于需要大量用户输入或需要响应各种提示的脚本,它是一个不错的选择。

使用管道 ‘|’

自动回答交互式提示的另一种方法是使用echo命令将响应作为输入发送到提示。这可以通过使用管道(|)将echo命令的输出作为输入发送到交互式程序来完成。

以下是如何使用echo回答交互式提示的示例:

示例

$ echo "myresponse" | program

这将在程序提示用户输入时将"myresponse"作为输入发送给程序。

使用yes命令

yes命令可用于向交互式提示发送重复的响应,例如“yes”。当提示要求用户确认操作或进行选择时,这非常有用。

以下是如何使用yes回答交互式提示的示例:

示例

$ yes | program

这将在program每次提示用户输入时发送响应“yes”。

您还可以使用-s选项指定要由yes输出的不同字符串。

示例

$ yes -s "myresponse" | program

这将在program每次提示用户输入时发送响应“myresponse”。

Linux

一些程序提供命令行选项来完全禁用交互式提示。在运行脚本或自动化任务时,这非常有用。

例如,apt-get命令(用于在基于Debian的系统上安装和管理软件包)具有-y选项,它将自动对任何提示假设“yes”。

以下是如何使用-y选项禁用交互式提示的示例:

示例

$ apt-get -y update

这将更新软件包列表,而无需提示用户确认。

结论

总而言之,有多种方法可以自动回答Linux中的交互式提示。expect命令是用于自动化交互式程序的强大工具,而echo命令可用于将响应作为输入发送到提示,yes命令可用于发送重复的响应。此外,一些程序提供命令行选项来完全禁用交互式提示。了解这些方法在运行脚本或自动化Linux中的任务时可能很有用。

更新于:2023年4月5日

5K+ 次浏览

开启您的职业生涯

通过完成课程获得认证

开始学习
广告
© . All rights reserved.