2017-05-07 9 views
0

Ich habe eine Liste von etwa 5 k Benutzer, die ich durch die Back-End-Befehls-API eines Server-Programms durchlaufen müssen, um Kontoinformationen abrufen. Im Moment mache ich das über 2 Skripte. Das erste ist ein Bash-Skript, das jede Zeile in einer Datei übernimmt und die Daten dem nächsten Skript zuführt, das ein Expect-Skript ist. Das Expect-Skript übernimmt dann die Daten aus der Datei als Argument und führt ein Telnet zur Befehls-API aus, um die benötigten Daten zu erhalten. Dies funktioniert gut, aber im Geiste der Effizienz, und nicht 5k Telnet-Verbindungen auf meinem Server zu öffnen gibt es eine Möglichkeit, alle Dateidaten in einer einzigen Telnet-Operation innerhalb der Expect-Skript zu wiederholen?Schleife Operation innerhalb erwarten Skript

Bash-Skript:

#!/bin/bash 

exp="/path_to_expect_script" 
file="/path_to_data_file" 


while read -r user; do 
$exp "$user" </dev/tty 

echo 

done < $file 

Expect Script:

#!/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 

ich so etwas wie dies möchte:

send "MYCOMMAND $user\r" 
expect "200 OK" 
send "MYCOMMAND $user\r" 
expect "200 OK" 
send "MYCOMMAND $user\r" 
expect "200 OK" 
etc.. 

Wie kann ich dies nicht erwarten, mit?

+1

Sie haben das Privileg * laufen myCommand Benutzer_b *, wenn Sie als * anmelden user_a *? – pynexj

+0

Ja, vorausgesetzt, Sie sprechen davon, dass "user_A" der Benutzer ist, der sich für die Tellnet-Sitzung autorisiert. MYCOMMAND user_B ist nur eine Variable, die aus der Datei in der while-Schleife importiert wird. – user53029

Antwort

0

Sie können dies von Expect-Skript tun. Wie im Kommentar erwähnt, wenn Sie das Recht haben, MYCOMMAND für alle Benutzer auszuführen.

spawn telnet 127.0.0.1 825 
expect "200 PWD Server ready" 
send "ROOT username\r" 
expect "300 please send the PASS" 
send "ROOT password\r" 
expect "200 login OK, proceed" 

set fp [open $file r] 
while { [gets $fp user] >= 0 } { #; Assuming file just contains user names 
    send "MYCOMMAND $user\r" 
    expect "200 OK" 
} 

close $fp 
send "quit\r" 
interact 

Ansonsten können Sie versuchen, als neuer Benutzer anmelden, indem Sie die while-Schleife zu modifizieren, wie unten

while { [gets $fp user] >= 0 } { 
    send "su $user\r" 
    expect "300 please send the PASS" 
    send "PASS password\r" 
    send "MYCOMMAND $user\r" 
    expect "200 OK" 
} 
+0

Das * fast * funktioniert. Eine Sache, die ich ändern musste, war das "erwarten" 200 ok "to" erwarten "200 Daten folgen". Hier ist was passiert. Es führt die Aktion aus, aber bei jedem anderen Befehl verdoppelt sich die Ausgabe. MYCOMMAND Benutzer 200 Daten folgen MYCOMMAND Benutzer Daten Ich möchte vom ersten Befehl hier 200 Daten folgen Daten möchte ich vom zweiten Befehl hier – user53029

Verwandte Themen