GNU/Linux >> Znalost Linux >  >> Linux

Proč příkaz Linux wall nevysílá argument řetězce?

Problém spočívá v syntaxi použité v odkazovaném článku. Abychom pochopili, co přesně se pokazilo, podívejme se na man wall :

Použití od man wall :

wall [file]

Wall displays the contents of file or, by default, its standard input

Takže wall přijímá buď ze dvou zdrojů pro jeho zprávu.

Argument názvu souboru

Libovolný argument příkazového řádku daný wall musí být název souboru. Protože neexistuje spolehlivý způsob, jak zjistit, zda je argument míněn jako zpráva nebo název souboru, wall bude předpokládat, že je to to druhé, bude ignorovat vše, co přichází na standardním vstupu, a pokusí se přečíst zprávu z tohoto souboru.

V daném případě se pokusí načíst ze souboru who's out there a nenajde to. Všimněte si, že čtení ze souboru je obvykle omezeno na superuživatele. Pokud jste spustili wall "who's out there" jako neprivilegovaného uživatele by jeho výstup pravděpodobně byl wall: will not read who's out there - use stdin.

Standardní vstup

Pokud na příkazovém řádku neobdrží argument názvu souboru, začne číst ze standardního vstupu. Existuje několik způsobů, jak vložit informace do standardního vstupu příkazu. Jedním z nich je použití potrubí UNIX. Potrubí propojí standardní výstup příkazu na levé straně se standardním vstupem příkazu na pravé straně:

$ echo "who's out there" | wall

Dalším způsobem je použití dokumentu zde. A here document je konstrukce shellu, která předává řetězec (až po zadanou koncovou značku na vlastním řádku) přímo standardnímu vstupu příkazu, aniž by mezikrok spočívající v tom, že by tento výstup vytvořil samostatný příkaz:

$ wall << .
who's out there?
.

To by bylo "zbytečné použití zde dokumentů", protože ve výchozím nastavení bude samotný terminál připojen k wall standardní vstup a wall začne z něj číst, dokud neobdrží znak konce souboru (Ctrl+D ):

$ wall
who's out there?
^D

Jak poznamenal Rich Homolka v komentářích, některé shelly podporují here strings které umožňují předání doslovného řetězce bez příkazu nebo koncových značek:

$ wall <<< "who's out there?"

Všichni dávají něco do wall standardní vstup. Rozdíl je v tom, že potrubí k němu připojuje výstup jiného příkazu, zatímco here documents a here strings předat řetězec přímo. Výhoda posledně jmenovaných dvou je zde estetická, jako echo příkaz z příkladu roury je vestavěný příkaz shellu, takže to bude shell poskytující wall vstup 's ve všech případech.


Linux
  1. Zvládněte příkaz Linux ls

  2. 5 Praktické příklady příkazu dd v Linuxu

  3. Vraťte zpět příkaz linuxového koše

  1. Jak používat Linuxový příkaz grep

  2. 8 tipů pro příkazový řádek Linuxu

  3. Jak používat příkaz historie v Linuxu

  1. Jak používat příkaz wall v Linuxu

  2. Úvod do příkazu alternatives v Linuxu

  3. Vyhledejte příkaz v Linuxu