2013-02-03 28 views
36

Sto creando il mio script bash, ma al momento sono bloccato. Fondamentalmente, lo script verrebbe utilizzato per automatizzare l'installazione del server in CentOS. Alcuni software normalmente richiedono all'utente di digitare una password. Voglio che lo script inserisca la password che ho generato e archiviata come variabile invece di chiedere all'utente.Simula l'input dell'utente nello script bash

Quando appare il messaggio "Nuova password:" durante l'installazione, come posso fare in modo che lo script inserisca il valore memorizzato in una variabile $key come se l'utente lo avesse digitato, con uno script bash?

risposta

38

Dovresti trovare che il comando "expect" farà ciò che ti serve. È ampiamente disponibile. Vedi qui per un esempio: http://www.thegeekstuff.com/2010/10/expect-examples/

(esempio molto approssimativa)

#!/usr/bin/expect 
set pass "mysecret" 

spawn /usr/bin/passwd 

expect "password: " 
send "$pass" 
expect "password: " 
send "$pass" 
+0

Sì, io uso aspettarsi molto! – Napolux

+0

ecco la "Nuova password:" appare mentre lo script sta installando roba con yum (es. Come mysql}. Potresti mostrarmi uno snippet di codice per questo caso particolare. Io uso sed principalmente e mai usato mi aspetto finora. il tutorial che hai fornito, sembra che tu possa aspettarti quando l'utente suppone di inserire qualcosa – Werulz

+1

Guarda la riga '#!' - questo è uno script Expect * * Il tutto è eseguito da 'expect', non da' bash' , quindi è scritto nel linguaggio Expect (che è fondamentalmente Tcl). I comandi importanti sono lì - 'spawn' per avviare il comando con cui stai interagendo,' expect' per aspettare che invii una stringa specifica, e 'invia 'per inviare una risposta.Se vuoi riportare il controllo all'utente, puoi farlo con' interact'. –

2

Ecco un pezzo di codice che ho scritto per lo script y per chiedere la password degli utenti e metterli in/etc/passwd. puoi manipolarlo un po 'probabilmente per ottenere quello che ti serve:

echo -n " Please enter the password for the given user: " 
read userPass 
useradd $userAcct && echo -e "$userPass\n$userPass\n" | passwd $userAcct > /dev/null 2>&1 && echo " User account has been created." || echo " ERR -- User acount creation failed!" 
+0

Ragazzi mi state sbagliando. Non voglio leggere l'input dell'utente. Tutto quello che voglio fare è quando (yum installa qualcosa) richiede l'input dell'utente per la password, dovrebbe * inserire * il valore trovato nella variabile $ chiave come input invece di chiedere all'utente di inserire qualcosa – Werulz

+0

Come quando appare la richiesta "Nuova password:" durante l'installazione, quindi impostare il valore in $ chiave come passaggio – Werulz

+0

in quanto, solo aspettarsi farà il lavoro. per esempio, ho usato aspettarsi di passare un valore quando un programma esterno richiede l'input da parte dell'utente. come quando voglio aggiungere la mia chiave ssh al mio ssh-agent, passerò automaticamente la passphrase a ssh-add tramite expect. – kevoroid