GNU/Linux >> Znalost Linux >  >> Linux

Proč výstup některých linuxových programů nejde ani do STDOUT, ani do STDERR?

Tato otázka je řešena v BashFAQ/032. Ve vašem příkladu byste:

{ time sleep 1; } 2> /dev/null

Důvod proč

time sleep 1 2>/dev/null

se nechová tak, jak očekáváte, protože s touto syntaxí budete chtít time příkaz sleep 1 2>/dev/null (ano, příkaz sleep 1 s stderr přesměrován na /dev/null ). Vestavěný time funguje tak, aby to bylo skutečně možné.

bash vestavěné může to vlastně udělat, protože... no, je to vestavěný. Takové chování by bylo nemožné s externím příkazem time obvykle umístěn v /usr/bin . Opravdu:

$ /usr/bin/time sleep 1 2>/dev/null
$

Nyní odpověď na vaši otázku

Proč výstup některých linuxových programů nejde ani do STDOUT, ani do STDERR?

je:ano, výstup jde do stdout nebo stderr .

Doufám, že to pomůže!


Vaše konkrétní otázka o time vestavěný byl zodpovězen, ale existují některé příkazy nezapisují ani do stdout nebo na stderr . Klasickým příkladem je unixový příkaz crypt . crypt bez argumentů zašifruje standardní vstup stdin a zapíše jej na standardní výstup stdout . Vyzve uživatele k zadání hesla pomocí getpass() , což ve výchozím nastavení zobrazí výzvu na /dev/tty . /dev/tty je aktuální koncové zařízení. Zápis na /dev/tty má účinek zápisu na aktuální terminál (pokud existuje, viz isatty() ).

Důvod crypt nelze zapisovat na stdout je to proto, že zapisuje šifrovaný výstup na stdout . Také je lepší požádat o /dev/tty místo zápisu do stderr takže pokud uživatel přesměruje stdout a stderr , výzva se stále zobrazuje. (Ze stejného důvodu crypt nelze přečíst heslo z stdin , protože se používá ke čtení dat za účelem šifrování.)


Linux
  1. Při použití data příkazu linux přidejte určitý čas

  2. Proč preprocesor C interpretuje slovo linux jako konstantu 1?

  3. Proč pr_debug linuxového jádra nedává žádný výstup?

  1. Určete, zda je výstup stdout nebo stderr

  2. Co znamená symbol linux pipe | dělat?

  3. Proč je výstup openssl passwd pokaždé jiný?

  1. Nakonfigurovat Shell pro tisk Stderr a Stdout v různých barvách?

  2. Výstup do Stdout a zároveň Grep do souboru?

  3. Linux:Jak použít soubor jako vstup a výstup zároveň?