Preparare le risposte per le domande di un comando


14

Diciamo che voglio scrivere uno script di shell che esegue solo un comando. Ma questo comando è mal progettato. Non offre alcuna opzione da riga di comando; invece pone alcune domande e attende l'input dell'utente.

Esiste un modo per preparare questo input nello script, in modo che le domande rispondano automaticamente?

Risposte:


16

Se il comando non è molto esigente, dovrebbe funzionare con qualcosa del genere:

command > /dev/null << EOF
<answer 1>
<answer 2>
<answer 3>
EOF

Ciò richiede che tu sappia in anticipo le risposte esatte.


È possibile utilizzare la risposta sopra per progettare uno script di wrapping. Il nuovo script dovrebbe ascoltare i parametri e chiamare il vecchio comando con il metodo sopra.
Walter A

Conosciuto anche come documento QUI, per maggiori informazioni potresti provare Wikipedia qui la definizione del documento
OldTimer

15

Aspettatevi di poterlo fare. Dal sito Web Expect :

Expect è uno strumento per automatizzare applicazioni interattive come telnet, ftp, passwd, fsck, rlogin, tip, ecc. Expect rende davvero queste cose banali. Expect è utile anche per testare queste stesse applicazioni [...] "

Viene fornito con molto aiuto, come autoexpect .

Sempre dal sito web Expect,

autoexpect ti osserva mentre interagisci con un altro programma e crea uno script Expect che riproduce le tue interazioni. Per gli script lineari, autoexpect consente di risparmiare tempo considerevole sulla scrittura manuale degli script.


La ringrazio per la risposta. Poiché le mie esigenze sono molto basse, Expect è eccessivo nel mio caso. Bjorns risponde perfettamente alle mie esigenze. Ma suggerirei di mantenere la tua risposta per gli altri che hanno bisogno di una soluzione più complessa.
tmuecksch,

+1 perché non sapevo che esistesse l'autoexpect e avevo pensato che la curva di apprendimento attesa fosse troppo ripida per me da disturbare. Vado a dare un'altra occhiata.
Joe,

7

Se il tuo script prevede una risposta a un prompt o più prompt in cui puoi dare la stessa risposta, c'è yes:

NAME
       yes - output a string repeatedly until killed

SYNOPSIS
       yes [STRING]...
       yes OPTION

DESCRIPTION
       Repeatedly output a line with all specified STRING(s), or `y'.

Usalo in questo modo:

yes Me | give_a_hug.sh

3
Un uso comune ma ironico è yes n, ad esempio:yes n | mv -i * somewhere/
Sam Watkins
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.