>> file command
Bedeutet das, dass allesstdout
umgeleitet wird, nicht nur das vom Kommando aus?
Eine solche Umleitung betrifft einen einfachen Befehl. Von man 1 bash
:
Bevor ein Befehl ausgeführt wird, können seine Eingabe und Ausgabe mithilfe einer speziellen Schreibweise umgeleitet werden, die von der Shell interpretiert wird. […] Die folgenden Umleitungsoperatoren können irgendwo in einem einfachen Befehl vorkommen oder erscheinen oder einem Befehl folgen. Umleitungen werden in der Reihenfolge von links nach rechts abgearbeitet.
„Die folgende Umleitungsoperatoren“ sind [n]<word
, [n]>word
, [n]>>word
usw.
Ein einfacher Befehl ist eine Folge optionaler Variablenzuweisungen, gefolgt von durch Leerzeichen getrennten Wörtern und Umleitungen, die von einem Steuerelementoperator beendet werden.
Und
Steueroperator
Ein Token, das eine Steuerfunktion ausführt. Es ist eines der folgenden Symbole:
||
&
&&
;
;;
(
)
|
|&
<Newline>
Dies bedeutet, dass die folgenden Befehle gleichwertig sind:
echo Some text >> file echo Some >> file text echo >> file Some text >> file echo Some text
Die Frage ist mit bash getaggt und ich zitiere, man 1 bash
aber die obigen Befehle funktionieren sh
auch.
Der Befehlszeilen-Parser muss alle Umleitungen "bedienen", bevor er den Befehl ausführt (dh der Befehl, der diese Umleitungen entfernt hat). Denken Sie darüber nach, der Vorgang ist derselbe, unabhängig davon, wo sich die jeweilige Umleitung befindet. Es gibt keinen Grund, es am Ende zu fordern.
Wann und warum sollten Sie die Bestellung umkehren?
Ich kann mich nicht an eine Situation erinnern, in der ich eine Umleitung in der Mitte haben wollte. Es gibt jedoch einen Anwendungsfall, bei dem eine Eingabeumleitung am Anfang sehr nützlich ist. Betrachten Sie diesen Code:
grep foo file | tail | …
Stellen Sie sich vor, die Pfeife ist sehr lang. Es ist auf Super User gepostet und löst einige Probleme. Sie können es in Ihre Konsole einfügen und ausführen. Was ist, wenn Sie es lieber an einen Befehl oder eine Pipe anhängen möchten ? ZB möchten Sie erhalten:
my_custom_command | grep foo | tail | … # ^^^^^^^^^^^^^^^^^^^ this is the part you'd be happy to paste
Sie müssen file
aus dem kopierten Befehl entfernen . Aus diesem Grund bevorzugen einige Benutzer Befehle wie diese:
cat file | grep foo | tail | … # ^^^^^^^^^^^^^^^^^^^ it's easy to copy this # ^^^^^^^^^^^^^^^^^^^^^ or even this
In anderen Fällen wäre dies völlig nutzlos cat
. Einige würden sagen, dass es immer noch ist, ungeachtet der Umstände. Wie wäre es mit:
< file grep foo | tail | … # ^^^^^^^^^^^^^^^^^^^ it's easy to copy this
Nein cat
und eine bequeme Form!