Ich möchte in der Lage sein, einen langen Befehl zu erwarten, zu erwarten. Es ist irgendwie ein Mehrfachbefehl. Zunächst ist hier mein erwarten SkriptWie kann EXPECT interpretieren ein maskiertes Zeichen zu einem Befehlszeichen
#!/usr/bin/expect -f
set timeout -1
spawn telnet xxx.xxx.xxx.xxx
expect "*?username:*"
send "someusername\r"
expect "*?assword:*"
send "somepassword\r"
# Here's the command I'd like to pass from the command prompt
set command [lindex $argv 0]
send "$command\r"
send "exit\r"
dann würde ich dieses Skript ausführen, wie so:
./expectscript "mkdir /usr/local/dir1\ncd /usr/local/dir1\ntouch testfile"
Beachten Sie, dass ich „\ n“ setzen, um eine Eingabe zu initiieren, als ob ich das bin Verarbeitung bevor Sie zum nächsten wechseln.
Ich weiß, dass Sie die Befehle mit ";" trennen könnten, aber für diese spezielle Übung möchte ich in der Lage sein, das "\ n" mit einem "\ r" interpretieren zu können, so dass Sie sich wie erwartet verhalten würden obwohl es so war:
send "mkdir /usr/local/dir1\r"
send "cd /usr/local/dir1\r"
send "touch testfile\r"
die Frage ist dann, wie die „\ n“ erwarten interpretieren „\ r“ zu sein? Ich habe versucht, das "\ r" in das Argument statt "\ n" zu setzen, aber das funktioniert nicht.
Danke für die Eingabe.
Beachten Sie, dass es für die Regexp '{\\ n}' ist, da wir einen Literal Backslash-n zuordnen möchten und das ist die Form, die die Anzahl der Backslashes minimiert, die Sie schreiben müssen, um das Literal nach Tcl's Analyse und der RE-Engine zu erhalten Parsing ... –
Danke für den zusätzlichen Schritt, um Ihre Antwort im Detail zu erklären :) – EDJ