Attendre dans le script bash: expect_out pas l'impression de tampon

Je suis en train d'essayer de capturer la sortie de la commande "dir" en vous connectant à un interrupteur, mais je suis incapable de le faire. Je suis l'aide d'attendre à l'intérieur de bash. Je suis en train de l'utilisation de expect_out pour capturer la sortie de cette commande dans un tampon et de l'imprimer. En fait, je veux capturer la sortie et d'effectuer certaines opérations sur elle.

SCript:

#!/bin/bash  
expect -c "  
spawn telnet 1.1.1.1 2000  
sleep 1  
send \"\r\"  
send \"\r\"  
expect {  
Prompt> { send \"dir\r\"  }  
}  
set output $expect_out(buffer)  
"    
echo "$output"  

De sortie:

spawn telnet 1.1.1.1 2000  
Trying 1.1.1.1...  
Connected to 1.1.1.1 (1.1.1.1).  
Escape character is '^]'.  




Prompt>  

Prompt>  

Après ces messages sont affichés, les scripts sorties seulement. Aide gentiment.

EDIT:

Je divise maintenant afin que je puisse utiliser le paramètre de substitution ainsi que des guillemets simples. Maintenant, je suis confronté à d'erreur différents.

Script:

expect -c "
spawn telnet $IP $PORT1
sleep 1
send \"\r\"
send \"\r\"
"
expect -c '
expect {
Prompt> { send \"dir\r\" }
set output $expect_out(buffer)
puts "$output"
}
'

De sortie:

spawn telnet 172.23.149.139 2033
can't read "expect_out(buffer)": no such variable
while executing
"expect {
Prompt> { send \"dir\r\" }
set output $expect_out(buffer)
puts "$output"
}
"

EDIT 2:
Bonjour Chris/tous,

J'ai changé en fonction de vos suggestions. Mais je suis toujours confronté à des erreurs.

Script:

output=$(expect -c '  
spawn telnet '"$IP $PORT1"'  
sleep 1  
send '"\r"'  
send '"\r"'  

expect Prompt> { send '"dir\r"'  }  
expect '"\n"'  
expect -indices Prompt>  
puts '"[string range $expect_out(buffer) 0 [expr $expect_out(0,end) - 1]]"'  

')  

echo "======="  
echo "$output"  
echo "======="  

De sortie:

syntax error in expression "(0,end) - 1"  
    while executing  
"expr (0,end) - 1"  
    invoked from within  
"string range (buffer) 0 [expr (0,end) - 1]"  
    invoked from within    
"puts [string range (buffer) 0 [expr (0,end) - 1]]"  

=======
spawn telnet 1.1.1.1 2000
Trying 1.1.1.1...
Connected to 1.1.1.1 (1.1.1.1).
Escape character is '^]'.




Prompt>

Prompt>

=======

Donc de contourner l'erreur, j'ai changé, la ligne

puts '"[string range $expect_out(buffer) 0 [expr $expect_out(0,end) - 1]]"'

à

puts '"$expect_out(buffer)"'

Mais alors je suis pas d'erreur, mais la sortie de la dir est aussi ne pas obtenir de l'imprimé. Quelque chose comme:

Prompt>

Prompt> (buffer)
Mise en forme astuce: Vous devez utiliser un code de mise en forme de votre code et de sortie des blocs (au lieu d'utiliser deux espaces à la fin de chaque ligne pour ligne de force/sauts de paragraphe). En plus d'être plus robuste (elle empêche Markdown interprétation du code), il est généralement plus facile à faire puisque vous pouvez simplement mettre en évidence le code et appuyez sur ctrl + K. Voir l'Édition de l'Aide (le point d'interrogation orange situé au-dessus du coin supérieur droit de la modification des zones de texte).

OriginalL'auteur Pkp | 2011-04-08