2017-07-07 2 views
-1

J'utilise expect et déjà établi un ssh connection.Variables de sortie par "attendre"

Je veux voir le résultat de ls -1 /etc/folder/.

J'ai essayé

send "files=$(ls -1 /etc/folder/)" 
put $files 

mais a échoué.

Comment est-ce que je pourrais faire ceci?

Répondre

1

Le problème grand que vous avez est qu'il y a des variables localement et des variables sur le système distant et ils ne sont pas du tout la même chose. Bien que oui, il est possible de construire des systèmes qui rendent les variables (semblent être) partagées automatiquement entre les systèmes, cela n'arrive certainement pas par défaut. C'est une chose conceptuelle que vous devez obtenir ou vous n'écrirez jamais le bon code sauf par accident. En dehors de cela, vous avez un moindre problème de ne pas envoyer la commande correctement, et ne pas gérer le résultat à venir. En supposant que vous savez que l'invite sur le système distant est juste un $ et que les fichiers ne commencent jamais avec cela, vous devez le faire.

# Note the \r; it is like pressing <Return> and is important! 
send "ls -1 /etc/folder \r" 
# Now we collect the output: 
set files {} 
expect { 
    "$ " { 
     puts $files 
    } 
    -re {^[^$].*$} { 
     # This grabs a line that doesn't start with $ and adds it to the list 
     lappend files $expect_out(0,string) 
     # Now we go back to waiting for another line or the prompt 
     exp_continue 
    } 
} 

Et c'est exactement comment vous le faites. Oui, il faut un peu de code ...

+0

Vous pouvez trouver que vous avez des retours chariot à la fin de chaque élément de la liste des fichiers. Vous pouvez vouloir '-re {^ ([^ $]. *) \ R? $} {Lappend files $ expect_out (1, string); exp_continue} ' –