Comment puis-je écho directement sur la sortie standard à l'intérieur d'une fonction shell?

J'ai, dans mon script shell une fonction qui affiche un message sur la console. Elle peut être appelée à partir de n'importe quelle autre fonction.

function print_message
{
    echo "message content"
}

Le problème est, en coquille, les fonctions comme echo ou printf que généralement les données d'impression sur la sortie standard, de rediriger leurs messages à la fonction d'appel plutôt que comme une valeur de retour.

return_value=$(print_message) # this line print nothing.
echo $return_value # This line print the message. I don't want to have to do it.

Je voudrais éviter ce problème et de les imprimer directement sur standard ou d'erreur de sortie. Est-il un moyen de le faire?

Ou suis-je eu tort de vouloir utiliser les fonctions du shell, et dois-je utiliser à la place une énorme script pour gérer n'importe quel comportement?

Vous voulez la sortie de print_message pour aller à la norme de l'erreur? Toujours? Redirection dans la fonction echo "message content" >&2.
Des sons comme ils le veulent sur le standard et erreur standard. STDOUT, de sorte qu'il est capturé par $( ... ) et STDERR de sorte qu'il s'affiche sur l'écran.
Qui fonctionne pour erreur standard, mais est-il un moyen d'imprimer sur la sortie standard ? >&1 ne semble pas fonctionner.
Le $(...) syntaxe est capture sortie standard. C'est là que votre problème vient de la première place. C'est ce qu'il fait. Vous ne pouvez pas avoir votre sortie de fonction à certains sortie standard que le reste de ce que vous appelez dans le $(...) contexte autre que l'utilisation de l'erreur standard et/ou de détecter et d'impression à l'ats/etc. directement.

OriginalL'auteur Aracthor | 2015-07-27