Prova questo:
echo -e "yes\nyes\nno" | /path/to/your/script
Da help echo
:
-e
:abilita l'interpretazione dei seguenti escape backslash
Convoglia verso input standard
Alcuni script possono ricevere risposte dall'input standard. Uno dei tanti modi per farlo sarebbe:
$ printf "%s\n" yes yes no | ./foo.sh
yes yes no
Questo è semplice e facile da leggere, ma si basa su come i tuoi script interni gestiscono l'input standard e se non puoi modificare lo script di destinazione a volte può essere un problema.
Utilizza Expect per i prompt interattivi
Mentre a volte puoi farla franca usando l'input standard, i prompt interattivi sono generalmente gestiti meglio da strumenti come Expect. Ad esempio, dato uno script foo.sh , puoi scrivere foo.exp per automatizzarlo.
Nota:puoi anche utilizzare autoexpect per creare uno script da una sessione interattiva, che puoi quindi modificare se necessario. Lo consiglio vivamente a chi non conosce Expect.
Script Bash:foo.sh
Questo è lo script che potresti voler automatizzare.
#!/usr/bin/env bash
for question in Foo Bar Baz; do
read -p "${question}? "
replies=("${replies[@]}" "$REPLY")
done
echo "${replies[@]}"
Script atteso:foo.exp
Ecco uno script Expect semplicistico per automatizzare lo script Bash sopra. Aspettatevi cicli, ramificazioni ed espressioni regolari possono fornire molta più flessibilità di quanto mostrato da questo esempio semplificato, ma lo fa mostra quanto può essere facile uno script Expect minimo!
#!/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
Sessione interattiva di esempio
Ecco come apparirà la tua sessione interattiva quando esegui lo script Expect. Genererà il tuo script Bash e risponderà come indicato a ogni diverso prompt.
$ /tmp/foo.exp
Foo? 1
Bar? 2
Baz? 3
1 2 3