2013-06-12 29 views

Trả lời

48

Nếu bạn muốn đọc từ đối số, bạn có thể đạt được điều này chỉ đơn giản bằng

set username [lindex $argv 0]; 
set password [lindex $argv 1]; 

Và in nó

send_user "$username $password" 

kịch bản đó sẽ in

$ ./test.exp user1 pass1 
user1 pass1 

Y ou có thể sử dụng chế độ gỡ lỗi

$ ./test.exp -d user1 pass1 
+5

Trong khi làm việc này, hãy cẩn thận sử dụng nó như quá trình của bạn sẽ xuất hiện với các đối số, tên người dùng và mật khẩu, khi làm một cái gì đó giống như "ps aux" – joeb

+0

thể chúng ta lặp danh sách đối số và đặt chúng trong mảng? – Vivek

5

Cách tốt hơn có thể là thế này:

lassign $argv arg1 arg2 arg3 

Tuy nhiên, phương pháp của bạn nên làm việc là tốt. Kiểm tra xem arg1 có được truy xuất không. Ví dụ: với send_user "arg1: $arg1\n".

-1

lưu ý, đôi khi argv 0 là tên của tập lệnh bạn đang gọi. vì vậy nếu bạn chạy nó theo cách đó, argv 0 không hoạt động,
cho tôi, tôi chạy "> mong đợi mật khẩu script.exp"

mà làm argv 1 = mật khẩu argv 0 = script.exp

0

args với không gian cũng tốt, giả sử arg bạn muốn là người đầu tiên sau tên kịch bản ($0 là tên kịch bản, $1 là arg đầu tiên, vv)

Hãy chắc chắn rằng bạn sử dụng "$ARG"KHÔNG$ARG vì nó wil KHÔNG bao gồm khoảng trắng, nhưng chia chúng thành từng cá nhân. Làm điều này trong bash kịch bản của bạn:

#!/bin/bash 

ARG="$1" 
echo WORD FROM BASH IS: "$ARG" #test for debugging 

expect -d exp.expect "$ARG" 

exit 0 

Ngoài ra, như các tiểu bang trả lời đầu tiên, sử dụng chế độ debug, (các -d cờ) Nó sẽ ra argv biến của bạn như expect nhìn thấy chúng, nên bạn thấy những gì đang xảy ra .

1
#!/usr/bin/expect 
set username [lindex $argv 0] 
set password [lindex $argv 1] 
log_file -a "/tmp/expect.log" 
set timeout 600 
spawn /anyscript.sh 
expect "username: " { send "$username\r" } 
expect "password: " { send "$password\r" } 
interact