Dieser Ausdruck hat mich ein wenig verwirrt:
gcc -c -g program.c >& compiler.txt
Ich weiß &>filename
, dass sowohl stdout als auch stderr in die Datei umgeleitet werden filename
. In diesem Fall steht das kaufmännische Und jedoch hinter dem Vorzeichen größer als. Es sieht aus wie in der Form M>&N
, wo M
und N
sind Dateideskriptoren.
Im obigen Ausschnitt, M=1
und N='compiler.txt'
? Wie genau unterscheidet sich das von:
gcc -c -g program.c > compiler.txt (ampersand removed)
Nach meinem Verständnis ist jeder geöffneten Datei ein Dateideskriptor größer als 2 zugeordnet. Ist das richtig?
Wenn ja, ist ein Dateiname mit seinem Dateideskriptor als Umleitungsziel austauschbar?
quelle
>&
ist die Syntax, die von csh und tcsh verwendet wird, um sowohl stdout als auch stderr umzuleiten. Das ist wahrscheinlich der Grund, warum Bash es akzeptiert.&>word
und>word 2>&1
semantisch äquivalent sind? Die Vorgeschichte von "Dies" ist mir nicht klar.&>word
,>word 2>&1
, und>&word
sind genau die gleichen.>
Leitet nur Standard aus.>
leitet den Fehler nicht um. (Ich sollte wahrscheinlich meine zukünftigen Kommentare an/dev/null
&>
vs>&
: die bevorzugte version ist&>
(clobber)Hinsichtlich:
&>
>&
In beiden Fällen wird die Datei überlastet. Schneiden Sie die Datei vor dem Schreiben auf 0 Byte ab, genau wie
> file
dies nur im Fall STDIN der Fall wäre.Allerdings ist der
bash
manuelle Umleitungen Abschnitt fügt hinzu , dass:(Hinweis: in
zsh
beiden sind gleichwertig .)Es ist eine sehr gute Praxis, das Fingerspeicher in der ersten (
&>
) Form zu erhalten, weil:Verwenden Sie so,
&>>
wie>>&
es nicht unterstützt wirdbash
(anhängen)Es gibt nur ein Formular zum Anhängen:
Hinweis:
&>
Over>&
im obigen Abschnitt wird erneut empfohlen, da es nur einen Weg zum Anhängen gibtbash
.zsh
erlaubt beides&>>
und>>&
Formen.quelle
&
ein Sonderzeichen, das vom Shell-Interpreter in 1 und 2 konvertiert wird?