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