Normalerweise würden Sie schreiben:
diff file1 file2
Ich möchte jedoch eine Datei und die Ausgabe des Befehls unterscheiden (hier mache ich den Befehl zu einem trivialen Befehl):
diff file1 <(cat file2 | sort)
Ok, dies funktioniert, wenn ich dies manuell an der Shell-Eingabeaufforderung eingebe, aber wenn ich genau die gleiche Zeile in das Shell-Skript einfüge und das Skript dann ausführe, wird eine Fehlermeldung angezeigt.
Die Frage ist also, wie man das richtig macht.
Natürlich möchte ich vermeiden, die Ausgabe in eine temporäre Datei zu schreiben.
quelle
-R
im Falle der Verwendunggit diff --no-index
diff - file1
.git diff
.git diff
ist eine völlig andere Bestie und verarbeitet Verweise auf Glob-Objekte in ihrem internen Index, nicht auf Dateien.diff
arbeitet auf dem Dateisystem. Die-
Syntax ist nur Shell-syntaktischer Zucker für/dev/stdin
die Datei, die den STDIN-Stream darstellt. Deshalbdiff
kann es als Ersatz für einen Dateinamen verwendet werden. Währenddessengit diff
sucht er nicht nach Dateien, sondern sucht nach Objekten, sodass Sie ihm etwas übergeben müssen, das er erkennt. Verwenden Sie es nicht, um Dateien miteinander zu vergleichen, verwenden Sie esdiff
dafür.Der Umfang der Standardeingabe ist das Skript selbst. Platzieren Sie Ihren Code also einfach in einem Block wie folgt:
Auf diese Weise befindet sich der Bereich der STDIN innerhalb des Blocks.
Ich habe es versucht und es funktioniert.
quelle
<(…)
Konstrukts. Ihr Skript funktioniert oder nicht, je nachdem, ob Sie es in einer Shell ausführen, die dies unterstützt<(…)
oder nicht (ksh93 / bash / zsh vs Bourne / ash / kshk88). Calebs Antwort macht alles klar.