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
risposta
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.
Grazie, quindi l'opzione & significa output su file desciptor anziché su file – mikip
Effettua la manipolazione dei descrittori di file. –
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
;
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
Questo riassume le cose! Nei miei 8 anni di utilizzo di Linux, nessuno ha spiegato questa cosa in modo così chiaro! Grazie compagno. –
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.
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.
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.
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
- 1. Cosa significa | & (barra verticale, e commerciale) significa in bash?
- 2. Cosa significa (&) - e commerciale in parentesi - significa in questo codice?
- 3. Che cosa significa "[questo]" significa in C++
- 4. Cosa significa "# $" in bash?
- 5. Che cosa significa "questo()" metodo?
- 6. Che cosa significa questo socket.gaierror?
- 7. Che cosa significa questo sovraccarico?
- 8. Che cosa significa il costrutto $ # in bash?
- 9. Cosa fa questo comando? "exec bash -l"
- 10. Bash & (e commerciale) operatore
- 11. In angolare, cosa significa una e commerciale nella direttiva?
- 12. Cosa significa -z in Bash?
- 13. Che cosa significa "&&" in questo file batch?
- 14. Che cosa significa? V = 2 in css?
- 15. Cosa significa -f in bash
- 16. Che cosa significa la e commerciale (&) in una definizione di tipo TypeScript?
- 17. Che cosa significa la e commerciale in un tipo di Ruggine?
- 18. Cosa significa [[$ - = * i *]] in bash?
- 19. Che cosa significa questo errore valgrind?
- 20. Cosa significa 0x0F? E cosa significa questo codice?
- 21. Cosa significa $ 1 $ 2 $ 4 in questo preg_replace?
- 22. Cosa significa iniziare una funzione PHP con una e commerciale?
- 23. Che cosa significa questo errore web.xml?
- 24. Che cosa significa questo attributo [Opzione (...)] C#?
- 25. Che cosa significa "& _" in VB?
- 26. Cosa significa questo operatore?
- 27. Che cos'è serializzabile? Cosa significa questo?
- 28. Che cosa significa il comando "nodo". fare?
- 29. Che cosa significa * | * questo significato nei CSS?
- 30. Cosa significa "due punti": in bash
Possibile duplicato (http://stackoverflow.com/questions/818255/in-the-shell-what -does-21-mean) –