2013-02-03 20 views
36

Tworzę własny skrypt bash, ale utknąłem w tej chwili. Zasadniczo skrypt byłby używany do automatyzacji instalacji serwera w CentOS. Niektóre oprogramowanie zwykle prosi użytkownika o wpisanie hasła. Chcę, aby skrypt umieszczał hasło, które wygenerowałem i zapisałem jako zmienną, zamiast pytać użytkownika.Symulowanie danych wprowadzanych przez użytkownika w skrypcie bash

Kiedy podczas instalacji pojawi się komunikat "Nowe hasło:", w jaki sposób mogę sprawić, aby skrypt zapisał wartość przechowywaną w zmiennej $key tak, jakby użytkownik ją wpisał ze skryptem bash?

Odpowiedz

38

Powinieneś znaleźć polecenie "oczekiwać" zrobi to, czego potrzebujesz. Jest powszechnie dostępny. Patrz tutaj dla przykładu: http://www.thegeekstuff.com/2010/10/expect-examples/

(bardzo szorstki przykład)

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

spawn /usr/bin/passwd 

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

Tak, używam wiele oczekuj! – Napolux

+0

tutaj jest "Nowe hasło:" pojawia się, podczas gdy skrypt instaluje rzeczy z mniam (np. Jak mysql}. Czy mógłbyś mi pokazać fragment kodu dla tego konkretnego przypadku. Używam sed głównie i nigdy nie używam oczekiwać tak daleko.Z samouczek, który podałeś, wygląda na to, że możesz oczekiwać, kiedy użytkownik ma wprowadzić coś, co jest – Werulz

+1

Spójrz na linię '#! '- to skrypt Expect *. Całość uruchamiana jest przez' expect', a nie przez 'bash' , więc jest napisane w języku Expect (w zasadzie Tcl), ważne polecenia - "odradzanie", aby uruchomić komendę, z którą wchodzisz w interakcje, "oczekuj", aż poczekasz, aż wyśle ​​konkretny ciąg, i 'wyślij 'wysłać odpowiedź.Jeśli chcesz przełączyć kontrolę z powrotem do użytkownika, możesz to zrobić za pomocą' interakcji' . –

2

Oto fragment kodu i napisał scenariusz do y poprosić o hasło użytkowników i ustawić je w pliku/etc/passwd. możesz nim manipulować trochę, aby uzyskać to, czego potrzebujesz:

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

You guys gettting mnie źle.Nie chcę czytać danych wprowadzanych przez użytkownika.All chcę zrobić, gdy (yum zainstalować coś) wymaga danych wejściowych użytkownika dla hasła, powinno * miejsce * wartość znaleziona w zmiennej $ key jako wejście zamiast proszenia użytkownika o wpisanie czegoś – Werulz

+0

Podobnie jak przy pytaniu "New Password:" pojawia się podczas instalacji, ustaw wartość w $ key jako pass – Werulz

+0

w tym, spodziewaj się, że zrobi to zadanie. na przykład, użyłem oczekiwań, aby przekazać wartość, gdy zewnętrzny program prosi o dane wejściowe od użytkownika. np. kiedy chcę dodać mój ssh do mojego ssh-agenta, automatycznie przekazuję frazę do ssh-add przez oczekiwanie. – kevoroid

Powiązane problemy