Quelle méthode dois-je utiliser pour écrire des messages d'erreur à "stderr " aide' printf' dans un script bash?

Je veux diriger la sortie d'un printf dans un bash script pour stderr au lieu de stdout.

Je suis pas de demander à propos de la redirection soit stderr ou stdout de l'endroit où ils sont actuellement acheminés. Je veux juste être en mesure d'envoyer la sortie d'une printf à stderr au lieu de la valeur par défaut de stdout.

J'ai testé un peu et a trouvé que l'ajout de 1>&2 à la printf, comme illustré dans l'exemple ci-dessous, qui semble faire ce que je veux. Cependant, j'ai pas expérience de l'utilisation de bash. Donc, mon primaire question est de savoir si il y a un "mieux" moyen de le faire dans bash?

Par "mieux" je veux dire, est-il une autre façon de faire ce qui est plus couramment utilisé, plus classiques, ou plus idiomatique? Comment serait un plus expérimentés bash programmeur de le faire?

#!/bin/bash
printf "{%s}   This should go to stderr.\n" "$(date)" 1>&2 
printf "[(%s)] This should go to stdout.\n" "$(date)" 

J'ai aussi un secondaire question. Je demande non pas parce que je besoin savoir, mais plus parce que je suis curieux et que vous souhaitez avoir une meilleure compréhension de ce qui se passe.

Il semble que le ci-dessus ne fonctionnera que lorsqu'il s'exécute à l'intérieur d'un script shell. Il ne semble pas fonctionner quand je l'ai essayer en ligne de commande.

Voici un exemple de ce que je veux dire.

irrational@VBx64:~$ printf "{%s} Sent to stderr.\n" "$(date)" 1>&2 2> errors.txt
{Sat Jun  9 14:08:46 EDT 2012} Sent to stderr.
irrational@VBx64:~$ ls -l errors.txt
-rw-rw-r-- 1 irrational irrational 0 Jun  9 14:39 errors.txt

J'attendrais la printf de commande au-dessus de ne pas avoir de sortie parce que la sortie doit aller à stderr, qui à son tour devrait aller vers un fichier. Mais cela n'arrive pas. Hein?