GNU/Linux >> Linux Esercitazione >  >> Linux

Come posso rispondere automaticamente alle richieste in uno script Linux Bash?

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

Linux
  1. Come eseguire un comando bash Linux in uno script PERL?

  2. Come abbreviare il prompt di Bash in Linux?

  3. Uno script Bash può essere agganciato a un file?

  4. Come dividere una stringa nello script Bash

  5. Come posso collegare simbolicamente un file in Linux?

Come personalizzare il prompt di Bash in Linux

Come utilizzare la password crittografata nello script della shell Bash Linux

Come creare uno script di un comando Linux

Come eseguire uno script Bash

Come posso testare il mio script Bash su versioni precedenti di Bash?

Come posso risolvere un nome host in un indirizzo IP in uno script Bash?