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.

È stato utile?

Soluzione

Tubazioni funziona da un processo all'altro (i cats 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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top