2010-02-26 10 views
32

Quick one, 2>&1 reindirizza da stderr a stdout, ma cosa significa "e commerciale"? So che se avessimo 2 > 1, l'output verrebbe generato in un file denominato 1, cosa fa la e commerciale?Che cosa significa la e commerciale in questo comando bash 1> & 2

+0

Possibile duplicato (http://stackoverflow.com/questions/818255/in-the-shell-what -does-21-mean) –

risposta

16

E file di copie descrittore 1 nel descrittore di file 2. FD2 è stderr e FD1 è stdout, in modo che rende qualsiasi output su stderr va invece a stdout.

+1

Grazie, quindi l'opzione & significa output su file desciptor anziché su file – mikip

+1

Effettua la manipolazione dei descrittori di file. –

55

2>&1 reindirizza l'errore standard (file handle 2) sullo stesso file che l'output standard (handle di file 1) è attualmente che va a.

E 'anche una cosa dipendente dalla posizione così:

prog >x 2>&1 >y 

sarà effettivamente inviare errore standard per x e standard output a y come segue:

  • Collegare l'uscita standard x;
  • Quindi collegare l'errore standard allo stesso valore dell'uscita standard corrente, ovvero x;
  • Quindi collegare l'uscita standard a y;
+2

Avrei dovuto farlo più volte se potessi. Sono stato sconcertante e la tua spiegazione dell'importanza di * order * è più chiara dell'attuale documentazione di bash: http://www.gnu.org/software/bash/manual/bashref.html#Redirections. Grazie! – FMc

+1

Questo riassume le cose! Nei miei 8 anni di utilizzo di Linux, nessuno ha spiegato questa cosa in modo così chiaro! Grazie compagno. –

6

Da info bash:

3.6.7 Duplicating File Descriptors 
---------------------------------- 

The redirection operator 
    [N]<&WORD 
    is used to duplicate input file descriptors. If WORD expands to one 
or more digits, the file descriptor denoted by N is made to be a copy 
of that file descriptor. If the digits in WORD do not specify a file 
descriptor open for input, a redirection error occurs. If WORD 
evaluates to `-', file descriptor N is closed. If N is not specified, 
the standard input (file descriptor 0) is used. 

    The operator 
    [N]>&WORD 
    is used similarly to duplicate output file descriptors. If N is not 
specified, the standard output (file descriptor 1) is used. If the 
digits in WORD do not specify a file descriptor open for output, a 
redirection error occurs. As a special case, if N is omitted, and WORD 
does not expand to one or more digits, the standard output and standard 
error are redirected as described previously. 

Così 2>&1 duplicati fd 1 sul fd 2.

16

La e commerciale appartiene al "1", quindi lo snippet ha realmente tre parti: "2", ">", "& 1". Significa, rispettivamente, "prendere i dati dal flusso di output 2 (che è errore standard)", "reindirizzare" e il target di reindirizzamento, che è il flusso di output 1. Quindi "&" qui consente di reindirizzare a uno stream esistente , piuttosto che su un file.

0

La e commerciale non fa nulla: è il carattere nell'operatore anziché essere una cosa a sé stante.

bash supporta diversi redirection operators, l'operatore 2>&1 o l'operatore &> uniscono i flussi del processo prima o dopo il reindirizzamento.

12

Il & in &1 duplica il descrittore di file 1. Il descrittore duplicato in realtà non si comporta come una copia, ma come un alias di quello vecchio. La duplicazione di 1 consente a più flussi di essere reindirizzati a 1 senza sovrascrivere l'un l'altro.

Esempio: (senza &)

$ ls existing-file non-existent-file > tmp 2> tmp 
$ cat tmp 
existing-file 
nt-file: No such file or directory 

noti che 1 sovrascritto quello 2 scritto.Ma non quando usiamo &:

$ ls existing-file non-existent-file > tmp 2>&1 
$ cat tmp 
ls: non-existent-file: No such file or directory 
existing-file 

Un descrittore file è un handle a un file (o un'altra risorsa di ingresso/uscita, come ad esempio un attacco tubolare o rete). Quando 1 e 2 vengono reindirizzati separatamente a tmp (come nel primo esempio), spostano il puntatore del file tmp in modo indipendente. Ecco perché i descrittori di file si sovrascrivevano l'un l'altro.

Secondo i Linux man page:

[descrittori di file duplicati] si riferiscono alla stessa descrizione di file aperto e quindi compensati condivisione di file e di stato di file bandiere; ad esempio, se lo spostamento del file viene modificato utilizzando lseek (2) su uno dei descrittori, l'offset viene modificato anche per l'altro.

noti che anche se & agisce come un alias, 2>&1 mezzi reindirizzare 2 al flusso che 1 in attualmente indicando. Quando 1 viene reindirizzato a qualcos'altro, 2 punta allo stesso file effettuato indipendentemente da 1.

Osservare: [? Nella shell, che cosa fa "2> & 1" significa]

$ ls existing-file non-existent-file > tmp 2>&1 > tmp1 
$ cat tmp1 
existing-file 
$ cat tmp 
ls: non-existent-file: No such file or directory 
Problemi correlati