Ich möchte expect
verwenden, um einen einfachen Befehl cat /tmp/id_rsa.pub
über ssh auszuführen.
In einer Shell kann ich dieses Wo-Problem ausführen (mit manuell eingegebenem Passwort)
%Vor% Ich möchte das mit expect
automatisieren. Mein expect
Skript ist,
Es wird der Fehler bash: cat /tmp/id_rsa.pub: no such file or directory
ausgegeben. Es sieht sehr komisch aus. Was könnte die mögliche Ursache sein?
Edit: Nach einigen Tests finde ich das nicht nur im Fall von cat
üblich. Wenn das Argument für den erzeugten Befehl im Leerzeichen steht (auch wenn es in den Anführungszeichen steht), hat es ein Problem. Beispiel: Ersetzen Sie cat /tmp/id_rsa.pub
durch andere Befehle mit Leerzeichen wie
es klagt mit bash: which java: command not found
. Aber wenn das durch pwd
ersetzt wird, wie
es funktioniert gut.
Einfache Anführungszeichen ( '
) haben im Gegensatz zu sh und anderen kompatiblen Shells keine besondere Bedeutung für Expect.
Dies bedeutet, dass Ihre Anweisung
wird in die folgenden Wörter unterteilt:
spawn
ssh
root@localhost
'cat
- nicht bis zum anderen einfachen Zitat. /tmp/id_rsa.pub'
Die Verwendung in sh besteht darin, dies zu einem einzigen Argument zusammenzufassen. In Tcl können Sie entweder doppelte Anführungszeichen ( "
) oder geschweifte Klammern ( {}
) verwenden. In doppelten Anführungszeichen werden Tcl-Variablen ersetzt, während der Inhalt in {}
ohne Substitution 1 übergeben wird.
tl; dr Das Expect / Tcl-Äquivalent von shs '
ist {}
.
1 A \
, bevor eine neue Zeile noch ersetzt wird.
Ich nehme an, dass Sie eval
nicht benötigen. Entfernen Sie es und überprüfen Sie es.
Sehen Sie sich den Beispiel-Link für Beispiele an, um detaillierte Beispiele zur Verwendung von expect
zu erhalten. .
Hoffe, das hilft.
Tags und Links bash automation automated-tests expect