GNU/Linux >> Tutoriels Linux >  >> Linux

Pourquoi la commande Linux wall ne diffuse-t-elle pas d'argument de chaîne ?

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.


Linux
  1. Comment utiliser la commande Linux grep

  2. 8 conseils pour la ligne de commande Linux

  3. Comment utiliser la commande history sous Linux

  4. La commande locate sous Linux

  5. Annuler la commande de la corbeille Linux

La commande timer sous Linux

La commande Linux curl

Exemples essentiels de la commande ps sous Linux

Qu'est-ce que la commande kill sous Linux ?

Comprendre la commande time sous Linux

Utilisation de la commande grep sous Linux