it-swarm.com.de

Was bedeutet> &?

Ich war etwas verwirrt von diesem Ausdruck:

gcc -c -g program.c >& compiler.txt

Ich weiß, dass &>filename sowohl stdout als auch stderr zur Datei filename umleitet. In diesem Fall ist das Et-Zeichen jedoch nach dem Größer-Zeichen. Es sieht aus wie in der Form M>&N, wobei M und N Dateideskriptoren sind.

In dem obigen Snippet werden M=1 und N='compiler.txt'? Wie genau unterscheidet sich das von:

gcc -c -g program.c > compiler.txt     (ampersand removed)

Ich verstehe, dass jeder geöffneten Datei ein Dateideskriptor größer als 2 zugeordnet ist. Ist das korrekt?

Wenn ja, kann ein Dateiname mit seinem Dateideskriptor als Ziel der Umleitung ausgetauscht werden?

63
contrapositive

Dies ist dasselbe wie &>. Von der bash-Manpage:

Umleiten von Standardausgabe und Standardfehler Dieses Konstrukt erlaubt sowohl die Standardausgabe (Dateideskriptor 1) als auch die Standardfehlerausgabe (Dateideskriptor 2), die an die .__-Datei umgeleitet werden soll. Datei, deren Name die Erweiterung von Word ist.

There are two formats for  redirecting  standard  output  and  standard
error:

       &>Word
and
       >&Word

Of the two forms, the first is preferred.  This is semantically equiva-
lent to

       >Word 2>&1
72
jordanm

&> vs >&: Die bevorzugte Version ist &> (clobber)

Bezüglich:

  • &>
  • >&

beide werden die Datei klaffen - kürzen Sie die Datei vor dem Schreiben auf 0 Byte, genau wie > file dies im Fall von nur STDIN tun würde.

Allerdings fügt der bash-Abschnitt für manuelle Umleitungen Folgendes hinzu:

Von den beiden Formen ist die erste bevorzugt. Dies ist semantisch äquivalent zu

>Word 2>&1

Bei Verwendung des zweiten Formulars kann Word möglicherweise nicht auf eine Zahl oder einen - erweitert werden. Wenn dies der Fall ist, gelten aus Gründen der Kompatibilität andere Umleitungsoperatoren (siehe Dubletten von Dateideskriptoren weiter unten).

(Hinweis: in zsh sind beide gleichwertig .)

Es ist sehr empfehlenswert, den Fingerspeicher in der ersten (&>) Form zu erhalten, weil:

Verwenden Sie &>>, da >>& nicht von bash unterstützt wird (anhängen).

Es gibt nur ein Anfügungsformular:

Das Format für das Anhängen der Standardausgabe und des Standardfehlers lautet:

&>>Word

Dies ist semantisch äquivalent zu

>>Word 2>&1

(siehe Duplizieren von Dateideskriptoren weiter unten).

Hinweis:

  • Die Verwendung von &> über >& im obigen Abschnitt wird erneut empfohlen, da in bash nur eine Möglichkeit zum Anhängen besteht. 
  • zsh erlaubt sowohl &>>- als auch >>&-Formulare.
0
Tom Hale