Imprimer un message depuis le côté gauche d'un tuyau

Je veux utiliser une variable du shell principal dans un sous-shell. J'ai fait:

export mysql_root_password="test" ( echo $mysql_root_password ) | dialog --gauge "Working hard..." 6 50 

Il n'y a pas de sortie. Bien sûr, il n'y a pas depuis que j'ai envoyé la sortie au dialog. Existe-t-il un moyen de sortir des variables spécifiques de manière normale sans supprimer la partie de dialog?

    Si votre système / shell le prend en charge, vous pouvez utiliser la redirection et la substitution de process pour exporter des éléments vers différents descripteurs de files. Par exemple:

     ( echo "This goes to fd 1" echo "This goes to fd 3" >&3 ) 3> /dev/tty | some command 

    Dans cet exemple, la première instruction echo est envoyée à some command , tandis que la seconde est envoyée au terminal.

     ( echo "This goes to fd 1" echo "This goes to fd 3" >&3 ) 3> >(some command) 

    Dans ce cas, la première instruction echo va à stdout , et la seconde instruction echo va à some command .

    Vous pouvez (et devriez probablement) imprimer vos messages de debugging sur le stream d'erreur standard du script au lieu de sa sortie standard. L'erreur standard ne passe pas par le tuyau, alors tout va bien.

     ( echo >&2 "$mysql_root_password" ) | dialog --gauge "Working hard..." 6 50 

    Si vous avez vraiment besoin du message sur la sortie standard du script, vous pouvez ouvrir un descripteur de file supplémentaire connecté à la sortie standard du script et redirect le message vers ce descripteur de file.

     { ( echo >&3 "$mysql_root_password" ) | dialog --gauge "Working hard..." 6 50 } 3>&1 

    Pour plus d'informations, voir Quand utiliseriez-vous un descripteur de file supplémentaire? et les messages auxquels il est lié.

    Vous pourriez faire écho à la valeur de mysql_root_password à stderr, si cette valeur est seulement diagnostique:

     echo $mysql_root_password >&2 

    Vous pourriez aussi peut-être utiliser tee :

     export mysql_root_password="test" ( echo $mysql_root_password ) | tee /dev/tty | dialog --gauge "Working hard..." 6 50 

    J'hésite à reorder tee comme parfois il (ou les tuyaux) font tampon qui rend la sortie less utile.