2011-10-04 12 views
53

Io lavoro con le istanze Amazon Linux e ho un paio di script per popolare i dati e installare tutti i programmi con cui lavoro, ma un paio di programmi chiedere:Come si scrive una risposta "sì" per l'installazione dei programmi?

Do you want to continue [Y/n]? 

e mettere in pausa l'installazione. Voglio rispondere automaticamente a "S" in tutti i casi, sono solo ora sicuro di come farlo.

+3

Il gestore pacchetti potrebbe disporre di un flag '--noprompt' o' --noconfirm' che è possibile utilizzare. – Blender

risposta

87

'yes' command echo 'y' (o qualsiasi cosa lo chieda a) indefinitamente. Usarlo come:

yes | command-that-asks-for-input 

o, se è richiesto un capitale 'Y':

yes Y | command-that-asks-for-input 
+0

funziona solo con qualche comando supportato per utilizzare l'input da yes, non è vero? Ho provato con un'occhiata da OpenStack e questo non funziona, penso che Expect sia più preciso per tutte le circostanze – HVNSweeting

+1

//, Cosa succede se devi inserire la parola completa "sì"? –

+2

@NathanBasanese Esegui il comando 'si si' – Dylan

3

Anche se questo può essere più complicato/più pesante di quello che vuoi, un modo molto flessibile per farlo è usare qualcosa come Expect (o una delle derivate in un altro linguaggio di programmazione).

Expect è un linguaggio progettato specificamente per controllare le applicazioni testuali, che è esattamente quello che stai cercando di fare. Se si finisce per dover fare qualcosa di più complicato (come con la logica per decidere realmente cosa fare/rispondere dopo), aspettarsi è la strada da percorrere.

32

echo y | command dovrebbe funzionare.

Inoltre, alcuni programmi di installazione hanno un flag "auto-sì". È -y per apt-get su Ubuntu.

+0

Sto cercando di fare echo "giturl no" | Registro jspm creare nome_server jspm-git nel mio script di shell. ma continua a fallire. mentre si entra nel giurl. Qualche idea? – manismku

+0

Un altro esempio: nella finestra mobile-compose c'è il contrassegno '-f' (' --force') che funziona come "auto-sì" per i comandi che rimuovono qualcosa – luke

+0

Come "echo Y" ricorsivamente nel caso in cui il prompt chieda una conferma più di una volta? –

7

//, si potrebbe non avere la possibilità di installare durante il server di destinazione. Questo è spesso il caso quando si scrive, per esempio, un lavoro di Jenkins.

Se è così, vorrei prendere in considerazione qualcosa come la risposta al seguente in askubuntu.com:

https://askubuntu.com/questions/338857/automatically-enter-input-in-command-line

printf 'y\nyes\nno\nmaybe\n' | ./script_that_needs_user_input 

Si noti che in alcuni rari casi il comando non richiede all'utente di premere invio dopo il personaggio. in tal caso lasciare i ritorni a capo out:

printf 'yyy' | ./script_that_needs_user_input 

Per completezza è anche possibile utilizzare un documento here:

./script_that_needs_user_input << EOF 
y 
y 
y 
EOF 

O se la shell lo supporta un qui stringa:

./script <<< "y 
y 
y 
" 

Oppure puoi creare un file con un input per riga:

./script < inputfile 

Ancora una volta, tutto il merito di questa risposta va all'autore della risposta su askubuntu.com, @lesmana.

+0

//, Si prega di assicurarsi di sovvertire l'utente askubuntu.com @lesmana se ti piace questa risposta. –

Problemi correlati