Datei existiert nicht im Expect-Skript

1209
user417721

Ich versuche zu prüfen, ob eine bestimmte Zeile in Dateiname auf einem Host vorhanden ist. Nur wenn ein bestimmtes Muster aus dem Befehl grep gefunden wird, wird eine dummy.txt erstellt. Dann möchte ich prüfen, ob dummy.txt als Bedingung existiert und fortfahren.

Obwohl dummy.txt erstellt wird, wird es von der if-Anweisung nicht gefunden:

if {[file exists $fileName] } 

und die Steuerung wird an den else-Block übergeben. Was könnte der Grund sein? Gibt es eine einfachere Methode, um das zu erreichen, was ich versuche?

 set Host [lindex $argv 0 ] spawn ssh -o StrictHostKeyChecking=no userid@$Host expect "*assword*" send "password\n" expect "+" send "cd path/that/contains/filename\n" expect "*$*" send "pwd\n" set fileName dummy.txt send } send "\n" expect "+" send } send "\n" expect "+" send "chmod 777 dummy.txt\n" if {[file exists $fileName] } {  send  send "\n" expect "+" send "ls -l\n" expect "+" send "rm dummy.txt\n" expect "+" send "ls -l\n" expect "+" send "exit\n" } else { send  send "\n" expect "+" send  send "\n" expect "+" send "cat filename\n" expect "+" send "exit\n"  } 
1
Anstelle dieses `wc | read ... `Sie könnten einfach den Rückgabecode von grep überprüfen (0 = Übereinstimmung gefunden, siehe` man grep`). ott-- vor 9 Jahren 0

1 Antwort auf die Frage

1
Scott

if {[file exists $fileName] }prüft, ob die Datei auf dem lokalen System vorhanden ist (das Verzeichnis, auf dem ausgeführt expectwird), die bedingt erstellte Datei befindet sich jedoch auf dem Remote-Host (dem, mit dem sich das Skript anmeldet ssh), falls vorhanden. Auch filenameist dummy, aber die bedingt erstellte Datei ist dummy.txt.

Sorry Scott, das war ein Tippfehler. Sein Dummy.txt überall. Wenn es eine Überprüfung auf dem Remote-Computer gibt, wie kann ich dann den Host überprüfen? Ich versuche, das Hinzufügen bestimmter Zeilen zu einer Datei zu automatisieren, aber wenn diese Zeilen bereits vorhanden sind, möchte ich keine doppelten Einträge, weshalb ich grep und dummy.txt verwende user417721 vor 9 Jahren 0
Vielen Dank, dass Sie den Tippfehler in der Frage behoben haben. Aber solange Sie die Frage bearbeiten, sollten Sie sie klarer machen. Ich verstehe deinen Kommentar nicht ganz. Wenn Sie auf dem Remote-Host abhängig von den Bedingungen auf dem Remote-Host etwas bedingt tun möchten, stellen Sie sich dies als Shellskript vor und verwenden Sie die Shell-Logik. zB `send `. Scott vor 9 Jahren 0
Ich muss etwas Inhalt hinzufügen, zB xyz abc zur Datei Dateiname auf dem Remote-Host. Ich möchte aber prüfen, ob diese xyz abc bereits in Dateiname vorhanden sind. um dies zu überprüfen verwende ich send } send "\ n" erwarten "+" send } send "\ n" Wenn also xyz abc in Dateiname vorhanden ist, wird eine neue Datei dummy.txt erstellt. Wenn dummy.txt auf der Fernbedienung vorhanden ist, bedeutet dies, dass xyz und abc in Dateiname vorhanden sind und das Skript sie nicht erneut hinzufügen muss user417721 vor 9 Jahren 0
Ich weiß, es scheint etwas langwierig zu sein, aber ich kann mir keinen einfacheren Weg vorstellen, dies zu erreichen, da ich Interaktion verwenden muss. Wenn Sie eine Lösung vorschlagen können, um nach der Datei auf dem Remote-Host zu suchen, oder eine einfachere Methode, um die gesamte Sache zum Laufen zu bringen, wäre das großartig :) user417721 vor 9 Jahren 0
`send {[-f dummy.txt] && echo" xyz abc ">> Dateiname}`. Oder lest meinen letzten Kommentar noch einmal. Scott vor 9 Jahren 0
Hallo Scott, danke! Aber ich scheine nicht zu verstehen, wie oder wo dies in meinem Skript erwartet würde. Könnten Sie bitte erklären ? user417721 vor 9 Jahren 0
Was verstehst Du nicht? Sie machen bereits Dinge auf dem Remote-Host, indem Sie `[…] &&…` senden. Passen Sie das einfach an, um das zu tun, was Sie möchten - wie ich in meinem letzten Kommentar erläutert habe. Scott vor 9 Jahren 0