differenza tra pipelining e il reindirizzamento in Linux
-
24-10-2019 - |
Domanda
Qualcuno può dirmi la differenza? per esempio:
se ho un file a.txt
con il seguente contenuto:
una
b
c
quale sarebbe la differenza tra cat a.txt | cat
e cat < a.txt
Mi sembra che tutti STDIN simulare, è quella giusta, o ci sono differenze? Grazie mille.
Soluzione
Tubazioni funziona da un processo all'altro (i cat
s nel primo esempio), e quindi richiede due processi cooperanti. Reindirizzamento è gestito dalla shell stessa. Questo può importa quando fare le cose nella shell come lavorare con le variabili .
Altri suggerimenti
Il riorientamento non lo fa "STDIN simulare". Quando si reindirizza, il file è stdin per il processo. In particolare, molti programmi hanno un comportamento diverso se l'ingresso è un file regolare che se si tratta di un tubo o un terminale, quindi si può ottenere un comportamento diverso. Ad esempio:
$ < file perl -E 'say "is a regular file" if -f STDIN' is a regular file $ cat file | perl -E 'say "is a regular file" if -f STDIN'
In primo luogo, due risultati sono gli stessi. Niente da dire.
Per il principio del lavoro cat a.txt | cat
, il primo gatto prende argomento a.txt
, quindi stampa il suo contenuto. Si reindirizza l'stdout
dei primi a stdin
del secondo. Il secondo cat
trova alcun argomento in modo che legge il contenuto da stdin
, e lo stampa.
Perché si utilizza <
nel secondo comando, sostituisce sistema stdin
di cat
con flusso di file di a.txt
. Tutto il resto è uguale alla seconda gatto nel primo caso.