Wie lautet der korrekte Name für den Befehl „>“?

38

Ich habe versucht zu finden, wie man einen Text in eine Datei übergibt, ohne zu überschreiben, was bereits mit dem >Befehl vorhanden ist, und habe festgestellt, dass ich nicht weiß, wie er heißt. Die Suche nach Pfeil nach rechts oder rechts Sparren oder mehr als Befehl zeigte nichts auf. Ich habe es immer nur als Weitergabe bezeichnet .

blarg
quelle

Antworten:

53

>ist kein Befehl, sondern eine Dateideskriptorumleitung. Dies bedeutet, dass die Shell diese Zuweisung analysiert, sie von der Befehlszeile entfernt und die Umgebung für den neuen Prozess ändert, in dem sie gestartet wird. Der neue Prozess bemerkt diesen Teil der Befehlszeile nicht. Das ist der Grund, warum Sie es überall hinstellen können: Am Anfang, am Ende oder dazwischen.

Suchen Sie nach dem REDIRECTIONBlock in man bash.

Um an eine vorhandene Datei anzuhängen, müssen Sie verwenden >>.

Hauke ​​Laging
quelle
Wenn die Option aktiviert noclobberist, >|wird die Datei überschrieben und möglicherweise gelöscht.
BSD
30

>ist ein Umleitungsoperator . Beachten Sie, dass >beim Umleiten in eine reguläre Datei die bereits vorhandenen Dateien überschrieben werden, es sei denn, noclobber ist aktiviert . >>wird an das Ende der Datei angehängt.

Josh Jolly
quelle
Und es wird nicht überschrieben, wenn noclobbergesetzt (bash).
Hauke ​​Laging
Aktualisiert meine Antwort, danke für die Klarstellungen.
Josh Jolly
5
@HaukeLaging noclobberist nicht nur ein Bashismus. Es ist Teil von POSIX
Kojiro
6

Wie andere Leute geantwortet haben, >handelt es sich nicht um einen Befehl, sondern um einen Umleitungsoperator. Der Begriff "Umleitungsoperator" bezieht sich jedoch nicht speziell auf die >, sondern auf eine Reihe verschiedener möglicher Umleitungsoperatoren. In der dashManpage sind die folgenden Umleitungsoperatoren aufgeführt:

 < > >| << >> <& >& <<- <>

Ich bin nicht sicher, ob es für jeden einen gültigen individuellen Namen gibt. Vielleicht finden Sie etwas Interessantes, wenn Sie in alten Shell-Handbüchern stöbern. Diese Quelle , ob richtig oder falsch, hat sicherlich die Absicht, einige von ihnen zu benennen:

>  - 'output redirection operator'
<  - 'input redirection operator'
>> - 'output append operator'

Aber auch:

2> - 'standard error redirection operator'

Ich halte dies jedoch nicht für richtig, da 2es sich eher um ein technisches Argument als um einen Teil des Betreibers handelt.

Eine Kurzreferenz (falls Sie keine der oben genannten erkennen):

>   - redirect output stream to a file, eg >somefile (for stdout) or 2>somefile
>|  - as above but overwrite the file even if the noclobber shell option is set
>>  - append output stream to file
<   - redirect input stream from file, n defaults to 0 for stdin
<>  - open file for reading and writing on stdin
>&  - redirect output stream to another stream (eg >&1) or close with - (eg 2>&-)
<<  - here document - see http://en.wikipedia.org/wiki/Here_document
<<- - here document with leading tabs removed.

In bashdir haben auch:

<<< - here string, a one line here file. Eg <<<"foo bar"
Graeme
quelle
Sehr schöne Schnellreferenzliste, aber keine <<-führenden Tabulatoren und Leerzeichen entfernen ?
Iconoclast
@iconoclast, nein, auf jeden Fall nur Tabs.
Graeme
0

> Leitet die Ausgabe an eine Datei (oder ein Gerät) um, wobei alle dort bereits vorhandenen Daten überschrieben werden

>> Leitet die Ausgabe an eine Datei (oder ein Gerät) weiter, die an bereits vorhandene Elemente angehängt wird

< Leitet Daten von einer Datei (oder einem Gerät) an ein Programm oder ein Gerät

<< ein hier dokument

les
quelle
1
<<ist ein hier Dokument
Graeme
1
@Graeme Ich habe meine Antwort bearbeitet. Vielen Dank für die Hilfe
les