ubuntuusers.de

Argumente an expect übergeben

Status: Gelöst | Ubuntu-Version: Server 18.04 (Bionic Beaver)
Antworten |

pascalts

Avatar von pascalts

Anmeldungsdatum:
6. Mai 2013

Beiträge: 89

Moin!

Ich habe hier ein expect-Script:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
#!/usr/bin/expect
log_user 0
set timeout 2
spawn telnet 192.168.178.35
expect "aus.\r\n" { send "\x1bRD90005f&" }
log_user 1
expect "\x26" { send "\x1d" }
log_user 0
expect "telnet>" { send "quit" }
puts "\r"
close
exit

Aber ich möchte einen Teil des Send-String an das Script übergeben, also "./foo.sh RD90005f" und in den send-String wird nach \x1b und vor & eben das RD90005f eingefügt. Ich habe schon ein paar Anleitungen gesehen, die Passwörter übergeben haben... aber keine hat für mich funktioniert. Könnt ihr mir einen Tipp geben?

Gruß Pascal

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17625

Wohnort: Berlin

Hast Du es mal mit $1 probiert? In der Bash ist $1 das erste Argument, $2 wäre ein zweites, per Default mit Whitespace voneinander getrennt.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
#!/usr/bin/expect
log_user 0
set timeout 2
spawn telnet 192.168.178.35
expect "aus.\r\n" { send "\x1b$1&" }
log_user 1
expect "\x26" { send "\x1d" }
log_user 0
expect "telnet>" { send "quit" }
puts "\r"
close
exit

pascalts

(Themenstarter)
Avatar von pascalts

Anmeldungsdatum:
6. Mai 2013

Beiträge: 89

Nein, leider nicht...

1
2
3
4
5
6
7
user@test: ./getData.sh ABC
can't read "1": no such variable
    while executing
"send "\x1b$1&" "
    invoked from within
"expect "aus.\r\n" { send "\x1b$1&" }"
    (file "./getData.sh" line 6)

seahawk1986

Anmeldungsdatum:
27. Oktober 2006

Beiträge: 11269

Wohnort: München

Wirf mal einen Blick in die Manpage zu expect:

Optional args are constructed into a list and stored in the variable named argv. argc is initialized to the length of argv.

argv0 is defined to be the name of the script (or binary if no script is used). For example, the following prints out the name of the script and the first three arguments:

send_user "$argv0 [lrange $argv 0 2]\n"

Wenn man lrang sieht, kann man drauf kommen, dass das Tcl ist und lindex wäre das Gegenstück zum Zugriff auf eine Listenposition (oder man liest http://mikiwiki.org/wiki/expect#Beispiel_1) - an das Argument mit dem Index 1 kommt man also so:

[lindex $argv 1]

pascalts

(Themenstarter)
Avatar von pascalts

Anmeldungsdatum:
6. Mai 2013

Beiträge: 89

Danke, das war der notwendige Tipp!

Antworten |