編寫一個能回答互動式提示的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+ 次瀏覽

開啟您的職業生涯

透過完成課程獲得認證

開始學習
廣告