2013-02-03 3 views
36

Ich erstelle mein eigenes Bash-Skript, aber ich stecke im Moment fest. Im Grunde würde das Skript verwendet werden, um das Server-Setup in CentOS zu automatisieren. Einige Software fordert den Benutzer normalerweise auf, ein Passwort einzugeben. Ich möchte, dass das Skript das von mir generierte und gespeicherte Passwort als Variable eingibt, anstatt den Benutzer zu fragen.Simulieren Benutzereingaben im Bash-Skript

Wenn die Meldung "Neues Passwort:" während der Installation angezeigt wird, wie kann ich das Skript den Wert in eine Variable $key setzen, als ob der Benutzer es eingegeben hätte, mit einem Bash-Skript?

Antwort

38

Sie sollten feststellen, dass der "expect" -Befehl tun wird, was Sie tun müssen. Es ist weit verbreitet. Sehen Sie hier für ein Beispiel: http://www.thegeekstuff.com/2010/10/expect-examples/

(sehr grobes Beispiel)

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

spawn /usr/bin/passwd 

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

Ja, ich benutze viel erwarten! – Napolux

+0

dude hier ist das "New password:" erscheint, während das Skript mit yum (zB wie mysql} installiert wird. Könntest du plz mir einen Codeausschnitt für diesen speziellen Fall zeigen. Ich benutze sed meistens und erwarte nie so weit. Von Tutorial, das Sie zur Verfügung gestellt haben, es scheint, Sie können erwarten, wenn Benutzer etwas eingeben soll – Werulz

+1

Schauen Sie sich die '#!' Zeile - das ist ein Expect * Skript *. Die ganze Sache wird von 'expect', nicht von' bash' ausgeführt , also ist es in der Expect-Sprache geschrieben (was im Grunde Tcl ist). Die wichtigen Befehle sind da - 'spawn', um den Befehl zu starten,' expat' zu warten, bis er eine bestimmte Zeichenfolge sendet, und 'send 'um eine Antwort zu senden Wenn Sie die Kontrolle wieder an den Benutzer wenden möchten, können Sie das mit' interact' tun –

2

ist hier ein Stück Code i für y Skript geschrieben für Benutzer-Passwort zu fragen, und stellen Sie sie in/etc/passwd. Sie können es ein wenig manipulieren, um zu bekommen, was Sie brauchen:

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

Sie Jungs bekommen mich falsch. Ich möchte nicht Benutzereingaben lesen. Alles was ich tun möchte ist, wenn (yum etwas installieren) erfordert Benutzereingaben für das Passwort, sollte es * den Wert * in * Variable * setzen $ key als Eingabe, anstatt den Benutzer zu bitten, etwas einzugeben – Werulz

+0

Wenn die Eingabeaufforderung "Neues Passwort:" während der Installation erscheint, dann setzen Sie den Wert in $ key als pass – Werulz

+0

in diesem, nur erwarten, dass der Job erledigt wird. Zum Beispiel habe ich erwartet, einen Wert übergeben, wenn ein externes Programm nach Eingabe vom Benutzer fragt. Wenn ich zum Beispiel meinen ssh-Schlüssel zu meinem ssh-agent hinzufügen möchte, übergebe ich die pass-Phrase automatisch an ssh-add via expect. – kevoroid