【发布时间】:2017-10-05 18:10:13
【问题描述】:
我有一个大约 5 k 用户的列表,我需要通过服务器程序的后端命令 API 运行这些用户以检索帐户信息。现在我正在通过 2 个脚本执行此操作。第一个是 bash 脚本,它获取文件中的每一行并将数据提供给下一个脚本,这是一个期望脚本。然后,expect 脚本将文件中的数据作为参数,并对命令 API 执行 telnet 以获取我需要的数据。这很好用,但是本着效率的精神,并且不必在我的服务器上打开 5k telnet 连接,有没有办法在期望脚本内的单个 telnet 操作中循环所有文件数据?
Bash 脚本:
#!/bin/bash
exp="/path_to_expect_script"
file="/path_to_data_file"
while read -r user; do
$exp "$user" </dev/tty
echo
done < $file
期望脚本:
#!/usr/bin/expect -f
lassign $argv user
spawn telnet 127.0.0.1 825
expect "200 PWD Server ready"
send "USER username\r"
expect "300 please send the PASS"
send "PASS password\r"
expect "200 login OK, proceed"
### Line below does the work ####
send "MYCOMMAND $user\r"
expect "200 OK"
send "quit\r"
interact
我想要这样的东西:
send "MYCOMMAND $user\r"
expect "200 OK"
send "MYCOMMAND $user\r"
expect "200 OK"
send "MYCOMMAND $user\r"
expect "200 OK"
etc..
我怎样才能用期望做到这一点?
【问题讨论】:
-
当您以 user_A 身份登录时,您是否有权运行 MYCOMMAND user_B?
-
是的,假设您正在谈论“user_A”是对 tellnet 会话进行身份验证的用户。 MYCOMMAND user_B 只是一个在 while 循环中从文件中引入的变量。