GNU/Linux >> Znalost Linux >  >> Linux

Jak mohu automaticky reagovat na výzvy ve skriptu Linux Bash?

Zkuste toto:

echo -e "yes\nyes\nno" | /path/to/your/script

Od help echo :

-e :povolit interpretaci následujících úniků zpětného lomítka


Napojení na standardní vstup

Některé skripty mohou přijímat odpovědi ze standardního vstupu. Jedním z mnoha způsobů, jak to udělat, by bylo:

$ printf "%s\n" yes yes no | ./foo.sh 
yes yes no

Toto je jednoduché a snadno čitelné, ale závisí na tom, jak interní skripty zpracovávají standardní vstup, a pokud nemůžete upravit cílový skript, může to být někdy problém.

Použijte Expect for Interactive Prompts

I když vám někdy projde standardní vstup, interaktivní výzvy obecně lépe zvládají nástroje jako Expect. Například zadaný skript foo.sh , můžete napsat foo.exp pro automatizaci.

Poznámka:Můžete také použít autoexpect k vytvoření skriptu z interaktivní relace, který pak můžete v případě potřeby upravit. Vřele bych to doporučil lidem, kteří začínají Expect.

Bash Script:foo.sh

Toto je skript, který byste mohli chtít automatizovat.

#!/usr/bin/env bash
for question in Foo Bar Baz; do
    read -p "${question}? "
    replies=("${replies[@]}" "$REPLY")
done
echo "${replies[@]}"

Očekávejte skript:foo.exp

Zde je zjednodušený skript Expect pro automatizaci výše uvedeného skriptu Bash. Očekávat smyčky, větvení a regulární výrazy mohou poskytnout mnohem větší flexibilitu, než ukazuje tento příliš zjednodušený příklad, ale dělá ukázat, jak snadný může být minimální skript Expect!

#!/usr/bin/env expect
spawn -noecho /tmp/foo.sh
expect "Foo? " { send -- "1\r" }
expect "Bar? " { send -- "2\r" }
expect "Baz? " { send -- "3\r" }
interact

Ukázka interaktivní relace

Takto bude vypadat vaše interaktivní relace, když spustíte skript Expect. Vytvoří váš skript Bash a odpoví podle pokynů na každou jinou výzvu.

$ /tmp/foo.exp 
Foo? 1
Bar? 2
Baz? 3
1 2 3

Linux
  1. Jak používat šifrované heslo ve skriptu Linux Bash Shell

  2. Jak ladit Bash skript?

  3. Jak přidat uživatele Unix/linux do skriptu Bash?

  1. Jak rozdělit řetězec ve skriptu Bash

  2. Jak mohu symbolicky propojit soubor v Linuxu?

  3. Jak zkontrolovat přístup k internetu pomocí bash skriptu v linuxu?

  1. Linux bash skript pro extrakci IP adresy

  2. Jak mohu otestovat svůj Bash skript na starších verzích Bash?

  3. Jak spustit bash skript?