Comment renvoyer une valeur du script enfant attendu au script parent parent

J’ai un script attendu dans un script shell. Mon problème est que je ne parviens pas à obtenir une valeur de variable du script anticipé enfant au script parent du shell.

S’il vous plaît trouver mon code ci-dessous:

#!/bin/sh expect <<- DONE spawn telnet myemailserver.com imap expect "* OK The Microsoft Exchange IMAP4 service is ready." send "a1 LOGIN myuser mypass\r" expect "a1 OK LOGIN completed." send "a2 EXAMINE INBOX\r" expect "a2 OK EXAMINE completed." send "a3 SEARCH UNSEEN\r" expect "a3 OK SEARCH completed." set results $expect_out(buffer) set list [split $results "\n"] send "a4 LOGOUT\r" expect "Connection closed by foreign host." spawn echo $list expect eof DONE echo $list exit 0 

J’ai découvert que la liste de variables à la dernière ligne est vide. Existe-t-il un moyen de transmettre la valeur de la variable $ list au script parent du shell?

Votre document est sujet à l’extension de la variable shell avant que le script ne soit donné à l’interprète d’attente. La variable $list est remplacée par rien (en supposant que vous n’avez pas déjà une variable shell nommée list dans votre programme). Vous devez vous assurer que le document ici est cité (voir ci-dessous)

Tout comme le fait de travailler avec awk ou sed, la communication inter-processus du shell est réalisée en transmettant des données le long des canaux d’E / S standard: le script shell doit capturer la sortie du programme expect:

 list=$( expect <<'END' log_user 0 # expect program here puts $list END ) echo $list 

Étant donné que je supprime la sortie terminale normale des programmes log_user 0 avec log_user 0 afin de renvoyer uniquement les informations cruciales au shell, vous devez remplacer spawn echo par la commande expect des puts .