verwenden Sie erwarten, dass spawn Befehl mit Argumenten, die Leerzeichen enthalten

Möchte ich expect zum ausführen eines einfachen Befehl cat /tmp/id_rsa.pub über ssh.

In einer shell, ich kann laufen, wo diese problem (mit manuell in das Passwort)

ssh root@localhost 'cat /tmp/id_rsa.pub'

Möchte ich den Vorgang automatisieren, mit expect. Meine expect Skript ist,

#!/usr/bin/expect
eval spawn ssh root@localhost 'cat /tmp/id_rsa.pub'
expect "password:"
send "123456"
expect eof

Wirft er Fehler bash: cat /tmp/id_rsa.pub: no such file or directory. es sieht sehr seltsam zu mir. Was könnte die mögliche Ursache?

Edit: nach einigen Tests, ich finde, das ist üblich, nicht nur im Fall von cat. Wenn das argument hervorgebracht Befehl wird mit Leerzeichen (auch wenn es in Anführungszeichen), wird es schwer haben. Ersetzen Sie beispielsweise cat /tmp/id_rsa.pub mit anderen Kommandos mit Leerzeichen, wie

eval spawn ssh root@localhost 'which java'

beschwert es sich mit bash: which java: command not found. Aber wenn austauschen, die mit pwd wie

eval spawn ssh root@localhost 'pwd'

es funktionieren.

  • Haben Sie versucht, entfernen Sie die Anführungszeichen um 'command-argument'? Es scheint, dass die Wurzel des Problems ist, versucht er zu interpretieren ist die gesamte Zeichenfolge in Anführungszeichen als name des Befehls, sondern als Aufteilung in Befehl und Argumente...
  • das ist die Arbeit. Ich habe auch versucht, die doppelten Anführungsstriche, wo/ problem. Nur aus Neugier, kann u erklären, ein bisschen was ist das Besondere an single-quotes?
  • Ich hätte zu Graben, die expect docs, um zu sehen, was es sagt - weiß nicht, aus der Spitze von meinem Kopf. Ich schlug vor, dass, basierend auf der syntax der jeweiligen Fehlermeldung, die Sie immer waren...
InformationsquelleAutor Richard | 2012-09-20
Schreibe einen Kommentar