Le problème réside dans la syntaxe utilisée dans l'article lié. Pour comprendre exactement ce qui ne va pas, regardons man wall
:
Utilisation à partir de man wall
:
wall [file]
Wall displays the contents of file or, by default, its standard input
Alors wall
accepte soit de deux sources pour son message.
Argument du nom de fichier
Tout argument de ligne de commande donné à wall
doit être un nom de fichier. Comme il n'y a pas de moyen fiable de savoir si l'argument est destiné à être un message ou un nom de fichier, wall
supposera qu'il s'agit de ce dernier, ignorera tout ce qui arrive sur l'entrée standard et essaiera de lire le message à partir de ce fichier.
Dans le cas donné, il essaie de lire à partir du fichier who's out there
et ne le trouve pas. Notez que la lecture d'un fichier est généralement limitée au superutilisateur. Si vous aviez exécuté wall "who's out there"
en tant qu'utilisateur non privilégié, sa sortie aurait probablement été, wall: will not read who's out there - use stdin.
Saisie standard
S'il n'obtient pas d'argument de nom de fichier sur sa ligne de commande, il commencera à lire à partir de l'entrée standard. Il existe plusieurs façons de fournir des informations à l'entrée standard d'une commande. L'une consiste à utiliser un tube UNIX. Un pipeline connectera la sortie standard de sa commande de gauche à l'entrée standard de sa commande de droite :
$ echo "who's out there" | wall
Une autre façon est d'utiliser un document ici. Un here document
est une construction shell qui passe une chaîne (jusqu'à un marqueur de fin spécifié sur une ligne qui lui est propre) directement à l'entrée standard d'une commande, sans l'étape intermédiaire d'avoir une commande distincte produisant cette sortie :
$ wall << .
who's out there?
.
Ce serait une "utilisation inutile des documents ici", car par défaut le terminal lui-même sera connecté à wall
l'entrée standard de et wall
commencera à lire jusqu'à ce qu'il reçoive un caractère de fin de fichier (Ctrl+D ):
$ wall
who's out there?
^D
Comme Rich Homolka l'a noté dans les commentaires, certains shells prennent en charge here strings
qui permettent de passer une chaîne littérale sans commande ni marqueur de fin :
$ wall <<< "who's out there?"
Tous envoient quelque chose à wall
l'entrée standard de . La différence est qu'un pipeline y connecte la sortie d'une autre commande, tandis que here documents
et here strings
passer la chaîne directement. L'avantage de ces deux derniers est ici d'ordre esthétique, comme le echo
La commande de l'exemple de canal est une commande intégrée du shell, ce sera donc le shell fournissant wall
dans tous les cas.