GNU/Linux >> Znalost Linux >  >> Linux

Více standardních vstupů? Jak?

Toto není vícenásobný standardní vstup. Toto je bash'ismus, který se nazývá 'Process Substitution'http://tldp.org/LDP/abs/html/process-sub.html

Vytvoří pseudo soubor (/dev/fd/something ) pro každé střídání. Je to docela užitečné. Příkaz může číst pouze jako proud, což znamená, že nemůže přecházet tam a zpět pomocí funkce fseek. Potřebuje to číst jako proud bajtů, jako potrubí.

BONUSOVÁ odpověď

Abyste to mohli používat, nemusíte dělat příliš mnoho. Pokud jde o váš skript, dostane na příkazovém řádku platný název souboru, který lze otevřít() jako cokoli jiného. Jak řekli ostatní, uvidíte diff /dev/fd/XX /dev/fd/YY . Pokud provedete stat() na kterémkoli z těchto pseudosouborů, uvidíte, že se jedná o pojmenovanou rouru a měli byste ji ošetřit sémantikou roury – jmenovitě žádné fseek() nebo ftell(). Pokud provedete test stat(), abyste explicitně zjistili, zda se jedná o soubor (např. [ -f $1 ] ) toto bude break - to je koneckonců implementováno jako pojmenované potrubí.


<(...) zpracovává substituci v bash. Výstup procesu v závorkách je odeslán do dalšího deskriptoru souboru nad rámec normálních 3 a je vrácen název souboru odpovídající tomuto deskriptoru souboru. Tímto způsobem lze s výstupem příkazu zacházet jako s názvem souboru, který má být předán jinému příkazu.


Existuje jeden stdin a jeden stdout pro každý proces . Obvykle jsou připojeny k terminálu, ale mohou být přesměrovány odděleně od sebe.

V příkladu jsou dva wget zapojených procesů, z nichž každý má svůj vlastní stdin a stdout . Každý wget proces zapisuje na - , což je jeho stdout . Potom bash 's proces substituce <(...) spojuje stdout procesu do jedinečného pseudosouboru, ze kterého diff umí číst. Všimněte si, že dvě substituce procesů poskytují dva různé pseudosoubory! Tedy diff vidí něco jako:

diff /dev/fd/XX /dev/fd/YY

kde stdout z wget -q -O - URL1 je připojen k /dev/fd/XX a stdout z wget -q -O - URL2 na /dev/fd/YY .


Linux
  1. Jak spustit proces Rsync na pozadí

  2. Jak zabít zombie proces

  3. Jak číst proměnné prostředí procesu

  1. Jak zabít proces zombie na Linuxu

  2. Jak nainstalovat vtop na Linux

  3. Jak se počítá priorita procesu?

  1. Jak komprimovat více souborů v systému Linux

  2. Jak poslat Stdout do více příkazů?

  3. Dd:Více vstupních souborů?