attendez met écrire ce fichier
Je suis en train d'écrire un script expect qui ssh en plusieurs IPs pour tester leur connectivité. Je voudrais inclure un "met" déclaration d'écrire le résultat de chaque test dans un fichier sur la machine de l'appel du script. Bien que je pense que je suis en suivant le manuel met à écrire dans un fichier, il écrit sur la sortie standard stdout. Veuillez voir le script ci-dessous. Le résultat final est que le fichier est créé sur la machine locale, mais pas de sortie est dirigée vers elle. Au lieu de cela, la sortie passe à stdout.
#!/bin/bash
USER=user
PASSWORD=password
IPSTART=12.34.56.
OUTFILE="TEST.log"
PROMPT="#"
for IPEND in `seq 200 231`
do
expect -c "
set timeout 3
set chan [open $OUTFILE w]
spawn ssh $USER@$IPSTART$IPEND
expect -re \".*ssword.*\" {send \"$PASSWORD\n\"}
expect {
-re \".*Are you sure you want to continue connecting.*\" {send \"yes\n\"; exp_continue}
-re \".*$PROMPT.*$.*\" {puts $chan \"$IPSTART$IPEND\n\"; send \"exit\n\"}
}
close $chan
"
done
Je me demandais si il pourrait y avoir un problème avec les citations, mais je ne peux pas le comprendre.
Pour la référence, c'est l'exemple de http://www.tcl.tk/man/tcl8.4/TclCmd/puts.htm
set chan [open my.log a]
set timestamp [clock format [clock seconds]]
puts $chan "$timestamp - Hello, World!"
close $chan
Vous devez vous connecter pour publier un commentaire.
Vous êtes probable problème est que vous avez été en utilisant des guillemets. Par conséquent, vous devez échapper à l'littérale
$
qui sera passé à attendre (ie.\$chan
):Bien, je coulnd pas comprendre comment le faire en bash, j'ai donc modifié le script en entier à attendre. Il fonctionne maintenant.