Viele Leute verwenden Oneliners und Skripte, die Code nach dem Vorbild enthalten
cat "$MYFILE" | command1 | command2 > "$OUTPUT"
Der erste cat
wird oft als "nutzloser Einsatz von Katze" bezeichnet, da technisch (oft /usr/bin/cat
) ein neuer Prozess gestartet werden muss, bei dem dies vermieden werden könnte, wenn der Befehl ausgeführt worden wäre
< "$MYFILE" command1 | command2 > "$OUTPUT"
Denn dann muss die Shell nur noch starten command1
und stdin
auf die angegebene Datei verweisen .
Warum führt die Shell diese Konvertierung nicht automatisch durch? Ich bin der Meinung, dass die Syntax "unnütze Verwendung von cat" einfacher zu lesen ist und Shell über genügend Informationen verfügen sollte, um unnütze cat automatisch loszuwerden. Das cat
ist im POSIX-Standard definiert, daher sollte die Shell die Möglichkeit haben, es intern zu implementieren, anstatt einen binären Pfad zu verwenden. Die Shell könnte sogar nur eine Implementierung für genau eine Argumentversion enthalten und auf binären Pfad zurückgreifen.
lseek
noch Verhalten definiert und könnte zu einem anderen Ergebnis führt, kann das unterschiedliche Sperrverhalten semantisch sinnvoll sein, usw. wäre es zulässig sein , um die Änderung zu machen , wenn Sie wissen , was die anderen Befehle waren und wussten , dass sie nicht egal, oder wenn Ihnen die Kompatibilität auf dieser Ebene einfach egal war, aber der Vorteil ist ziemlich gering. Ich kann mir vorstellen, dass der Mangel an Nutzen die Situation mehr antreibt als die Konformitätskosten.
cat
selbst oder ein anderes Dienstprogramm implementieren . Es ist auch zulässig zu wissen, wie die anderen zum System gehörenden Dienstprogramme funktionieren (z. B. wie sich die mit dem System gelieferte externe grep
Implementierung verhält). Dies ist durchaus machbar, und es ist durchaus fair, sich zu fragen, warum dies nicht der Fall ist.
grep
. Und sed
. Und awk
. Und du
. Und wie viele Hunderte, wenn nicht Tausende von anderen Versorgungsunternehmen?