2013-02-03 27 views
36

Tôi đang tạo tập lệnh bash của riêng mình, nhưng hiện tại tôi đang bị kẹt. Về cơ bản, kịch bản sẽ được sử dụng để tự động thiết lập máy chủ trong CentOS. Một số phần mềm thường yêu cầu người dùng nhập mật khẩu. Tôi muốn tập lệnh đặt mật khẩu mà tôi đã tạo và lưu trữ dưới dạng biến thay vì yêu cầu người dùng.Mô phỏng đầu vào của người dùng trong tập lệnh bash

Khi thông báo "Mật khẩu mới:" xuất hiện trong khi cài đặt, làm cách nào để làm cho tập lệnh đặt giá trị được lưu trữ trong biến $key như thể người dùng đã nhập, với tập lệnh bash?

Trả lời

38

Bạn nên tìm lệnh 'mong đợi' sẽ thực hiện những gì bạn cần để thực hiện. Nó có sẵn rộng rãi. Xem ở đây cho một ví dụ: http://www.thegeekstuff.com/2010/10/expect-examples/

(ví dụ rất thô)

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

spawn /usr/bin/passwd 

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

Vâng, tôi sử dụng kỳ vọng rất nhiều! – Napolux

+0

dude ở đây là "Mật khẩu mới:" xuất hiện trong khi tập lệnh đang cài đặt nội dung bằng yum (ví dụ như mysql}. Bạn có thể cho tôi xem đoạn mã cho trường hợp cụ thể này không. Tôi sử dụng hầu hết và không bao giờ được sử dụng như mong đợi. hướng dẫn bạn cung cấp, có vẻ như bạn có thể sử dụng mong đợi khi người dùng giả sử nhập một cái gì đó – Werulz

+1

Nhìn vào dòng '#!' - đây là một kịch bản * Kỳ vọng *. Toàn bộ điều được chạy bằng 'mong đợi', không phải bởi' bash' Vì vậy, nó được viết bằng ngôn ngữ Mong đợi (về cơ bản là Tcl) Các lệnh quan trọng là ở đó - 'spawn' để bắt đầu lệnh bạn đang tương tác,' expect' để chờ nó gửi một chuỗi cụ thể, và 'send 'để gửi trả lời. Nếu bạn muốn chuyển quyền kiểm soát trở lại người dùng, bạn có thể làm điều đó với' tương tác'. –

2

Dưới đây là một đoạn mã tôi đã viết cho kịch bản y để yêu cầu mật khẩu của người sử dụng và đặt chúng trong/etc/passwd. bạn có thể điều khiển nó một chút có thể để có được những gì bạn cần:

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

Các bạn đang gettting tôi sai. Tôi không muốn đọc input.All tôi muốn làm là khi (yum cài đặt một cái gì đó) yêu cầu đầu vào người dùng cho mật khẩu, nó nên * đặt * giá trị tìm thấy trong biến $ key làm đầu vào thay vì yêu cầu người dùng nhập thông tin – Werulz

+0

Giống như khi lời nhắc "Mật khẩu mới:" xuất hiện trong khi cài đặt, sau đó đặt giá trị bằng $ key là pass – Werulz

+0

trong đó, chỉ mong đợi sẽ thực hiện công việc. ví dụ, tôi sử dụng mong đợi để vượt qua một giá trị khi một chương trình bên ngoài yêu cầu đầu vào từ người dùng. như khi tôi muốn thêm khóa ssh của tôi vào ssh-agent, tôi tự động chuyển pass-phrase sang ssh-add qua mong đợi. – kevoroid

Các vấn đề liên quan