fragen stichworte

Expect-Skript druckt (cat) keine Datei auf dem Remote-Server

Ich habe ein Expect-Skript, das prüft, ob eine Datei auf einem Remote-Server vorhanden ist, und dann versucht, sie zu drucken (cat), wenn sie

tut

Aus irgendeinem Grund ignoriert das Expect-Skript diese Befehle.

send "if {[file exists "./abc.test"]} {cat ./abc.txt\r}"

antworten

Hier ist was ich getan habe und es hat jetzt funktioniert

cat/some/path/abc.txt 2>/dev/null

Auf diese Weise wird die Datei gedruckt, wenn sie existiert, und es wird keine Fehlermeldung ausgegeben, wenn dies nicht der Fall ist.

Ich habe Expect noch nie verwendet, aber Ihr Code-Beispiel ...

if {[file exists "./abc.test"]} {send "cat ./abc.txt\\r"}

... scheint das Vorhandensein von Dateien auf dem Computer zu prüfen, auf dem die erwarteten Läufe ausgeführt werden, nicht auf dem Remote-Rechner. Wenn das Skript also nicht auf dem Remote-Server ausgeführt wird, funktioniert es nicht.

Hm, Sie machen wahrscheinlich Dinge ziemlich umständlich.

Beschreiben Sie zunächst Ihren Kontext:

  • Genau wie (vollständige Befehlszeile) rufen Sie dieses Skript auf?
  • Wie kann auf den Remote-Server zugegriffen werden? Das Skript, das Sie bereitstellen, enthält keinen Fernzugriff.

Was versuchst du wirklich zu tun? Wenn Sie eine Datei auf einem Remote-System drucken möchten, ist es wahrscheinlich einfacher, ssh direkt aufzurufen. Expect ist für Skriptprogramme gedacht, die keine Skriptsprache haben (z. B. einfache FTP-Clients). Es ist unnötig kompliziert, es mit einer Befehlsshell zu verwenden, die bereits über eine mächtige Skriptsprache verfügt.