Schnell eins, 2>&1
leitet stderr auf stdout um, aber was bedeutet das kaufmännische Und? Ich weiß, wenn wir hatten 2 > 1
würde es in eine Datei mit dem Namen 1
ausgeben, was macht das kaufmännische Und?Was zeigt das Und-Zeichen in diesem Bash-Befehl an? 1> & 2
Antwort
Es kopiert Dateideskriptor 1 bis Descriptor 2. FD2 Datei ist stderr und FD1 ist stdout, so macht es Alle Ausgaben an stderr gehen stattdessen nach stdout.
Danke, also die & bedeutet Ausgabe an Datei-Descriptor anstelle von Datei – mikip
Es macht Manipulation der Dateideskriptoren. –
2>&1
leitet Standardfehler (Dateihandle 2) auf die gleiche Datei um, die Standardausgabe (Dateihandle 1) ist derzeit gehen zu.
Es ist auch eine positionsabhängige Sache so:
prog >x 2>&1 >y
tatsächlich Standardfehler auf x
und Standardausgabe y
senden wie folgt:
- Connect Standardausgabe
x
; - Dann verbinden Standard-Fehler zu gleichen als aktuelle Standard-Ausgabe, die
x
ist; - Dann Standardausgang an
y
anschließen;
Ich hätte das mehrmals verbessert, wenn ich könnte. Ich habe das rätselhaft gemacht und Ihre Erklärung über die Bedeutung von * order * ist klarer als die aktuelle Bash-Dokumentation: http://www.gnu.org/software/bash/manual/bashref.html#Redirections. Vielen Dank! – FMc
Das fasst alles zusammen! In meinen 8 Jahren, in denen ich Linux benutzt habe, hat niemand dieses Ding so klar erklärt! Danke Kumpel. –
Von 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.
So 2>&1
Duplikate fd 1 auf fd 2.
Das kaufmännische Und gehört zur "1", also hat das Schnipsel wirklich drei Teile: "2", ">", "& 1". Sie bedeuten jeweils "nehmen die Daten aus Ausgabestrom 2 (was Standardfehler ist)", "Redirect it" und das Umleitungsziel, das Ausgabestrom 1 ist. So "&" hier ermöglicht es Ihnen, zu einem vorhandenen Stream umzuleiten , anstatt zu einer Datei.
Das Ampersand tut nichts - es ist der Charakter in der 2>&1
Operator, anstatt ein Ding an sich zu sein.
Bash unterstützt mehrere redirection operators, die 2>&1
Operator oder die &>
-Operator binden die Ströme des Prozesses vor oder nach der Umleitung.
Die &
in &1
dupliziert den Dateideskriptor 1
. Der duplizierte Deskriptor verhält sich tatsächlich nicht wie eine Kopie, sondern wie ein Alias des alten. Duplizieren 1
ermöglicht mehrere Streams umgeleitet werden zu 1
ohne sich gegenseitig zu überschreiben.
Beispiel: (keine &
)
$ ls existing-file non-existent-file > tmp 2> tmp
$ cat tmp
existing-file
nt-file: No such file or directory
Beachten Sie, dass 1
überschreibt, was 2
schrieb.Aber nicht, wenn wir verwenden &
:
$ ls existing-file non-existent-file > tmp 2>&1
$ cat tmp
ls: non-existent-file: No such file or directory
existing-file
ein Dateideskriptor ist ein Handgriff in eine Datei (oder einer anderen Eingabe/Ausgabe-Betriebsmittel, wie beispielsweise ein Rohr oder eine Netzwerk-Socket). Wenn 1
und 2
separat zu tmp
(wie im ersten Beispiel) umgeleitet werden, verschieben sie ihren tmp
Dateizeiger unabhängig voneinander. Deshalb haben sich die Dateideskriptoren gegenseitig überschrieben.
Nach den Linux man page:
[Duplicate File-Deskriptoren] beziehen sich auf die gleiche offene Dateibeschreibung und damit Share-Datei-Offset und Dateistatusflags; Wenn beispielsweise der Dateioffset mit lseek (2) auf einem der Deskriptoren geändert wird, wird auch der Offset für den anderen geändert.
Beachten Sie, dass obwohl &
wirkt wie ein Alias, 2>&1
Mittel 2
zum Strom umleiten dass 1
in derzeit zeigt auf. Wenn 1
zu etwas anderem umgeleitet wird, zeigt 2
auf die gleiche Datei, unabhängig von 1
.
beachten: [? In der Shell was bedeutet "2> & 1" bedeuten]
$ 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. Was bedeutet -2 in diesem IL-Befehl?
- 2. Was ist falsch an diesem Python-Code?
- 3. Was ist falsch an diesem PHP-Skript?
- 4. Was ist das Problem in diesem Code?
- 5. Was macht das "& =" in diesem C# -Code?
- 6. Was ist falsch an diesem Ansatz?
- 7. Was ist falsch an diesem JSON-Code?
- 8. Was ist falsch an diesem Code-Snippet?
- 9. Was ist falsch an diesem Code?
- 10. Was ist falsch an diesem Rettungsbeispiel?
- 11. Was fehlt mir an diesem Code?
- 12. Was ist falsch an diesem regulären Ausdruck?
- 13. Was ist falsch an diesem PHP-Array?
- 14. Was ist falsch an diesem SQL-Schema?
- 15. Was ist falsch an diesem Verschluss?
- 16. Was ist falsch an diesem Code-Schnipsel?
- 17. Was ist falsch an diesem RedirectMatch-Ausdruck?
- 18. Was ist falsch an diesem Auslöser?
- 19. Was ist falsch an diesem Makro in Clojure?
- 20. Was ist falsch an diesem jquery Ausdruck?
- 21. An Experten: Was ist der Unterschied in diesem Code?
- 22. Was ist falsch an diesem Code in eckigen?
- 23. Curl zeigt automatisch das Ergebnis an?
- 24. Was ist falsch an diesem Code für Project Euler # 3?
- 25. Was passiert in diesem Code?
- 26. Wie zeigt man einen 2-stelligen NumberPicker in Android an?
- 27. AVCaptureVideoPreviewLayer zeigt das Vorschauzentrum nicht an
- 28. Firefox zeigt das Formular nicht an
- 29. Was bedeutet "&." in '& .sub-title' zeigt in scss an?
- 30. Android PreferencesActivity zeigt das vorherige Fragment an
Mögliche Duplikat (http://stackoverflow.com/questions/818255/in-the-shell-what -does-21-mean) –