Zuerst cat
schreibt auf die Standardausgabe, die nicht unbedingt ein Terminal ist, wenn auch cat
als Teil eines Befehls in einer interaktiven Shell eingegeben wurde. Wenn Sie wirklich etwas zum Schreiben in das Terminal benötigen, selbst wenn die Standardausgabe umgeleitet wird, ist dies nicht so einfach (Sie müssen angeben, welches Terminal verwendet wird, und es gibt möglicherweise nicht einmal ein Terminal, wenn der Befehl über ein Skript ausgeführt wird) könnte (ab) die Standardfehlerausgabe verwenden, wenn der Befehl nur ein Teil einer Pipeline ist. Aber da Sie angegeben haben, dass dies cat
tatsächlich der Fall ist, haben Sie wahrscheinlich nicht nach einer solchen Situation gefragt.
Wenn Sie beabsichtigen, das, was auf die Standardausgabe geschrieben ist, in eine Pipeline zu senden, ist using cat
für den Useless Use of Cat Award berechtigt , da cat file | pipeline
(wo pipeline
für eine Pipeline steht) dies effizienter durchgeführt werden kann <file pipeline
. Aber auch aus Ihrer Formulierung schließe ich, dass dies nicht Ihre Absicht war.
Es ist also nicht so klar, worüber Sie sich Sorgen machen. Wenn die Eingabe cat
zu lang ist, können Sie einen ein- oder zweistelligen Alias definieren (es gibt noch einige solche Namen, die in Standard-Unix nicht verwendet werden). Wenn Sie jedoch befürchten, cat
unnötige Zyklen zu verbringen, sollten Sie dies nicht tun .
Wenn es ein Programm gäbe null
, das keine Argumente akzeptiert und nur die Standardeingabe in die Standardausgabe kopiert (das neutrale Objekt für Pipelines), könnten Sie tun, was Sie wollen <file null
. Es gibt kein solches Programm, obwohl es einfach zu schreiben wäre (ein C-Programm mit nur einer einzeiligen main
Funktion kann den Job erledigen), aber ein Aufruf cat
ohne Argumente (oder cat -
wenn Sie explizit sein möchten) macht genau das.
Wenn es ein nocat
Programm gäbe , das genau ein Dateinamenargument verwendet, versucht, die Datei zu öffnen, sich darüber beschwert, wenn dies nicht möglich ist, und andernfalls von der Datei auf die Standardausgabe kopiert, dann ist dies genau das, wonach Sie gefragt haben. Es ist nur geringfügig schwieriger zu schreiben als null
, da die Hauptarbeit darin besteht, die Datei zu öffnen, zu testen und möglicherweise zu beschweren (wenn Sie akribisch sind, möchten Sie möglicherweise auch einen Test einfügen, bei dem es genau ein Argument gibt, und sich ansonsten beschweren). Aber wieder einmal cat
, jetzt mit einem einzigen Argument versehen, ist genau dies der Fall, sodass kein nocat
Programm erforderlich ist .
nocat
Warum sollten Sie nach dem erfolgreichen Schreiben des Programms bei einem einzigen Argument stehen bleiben? Das Einwickeln des Codes in eine Schleife for(;*argp!=NULL;++argp)
ist wirklich kein Aufwand, fügt der Binärdatei höchstens ein paar Maschinenanweisungen hinzu und vermeidet, sich über eine falsche Anzahl von Argumenten beschweren zu müssen (was viel mehr Anweisungen erspart). Voilà ist eine primitive Version von cat
verketteten Dateien. (Um ehrlich zu sein, müssen Sie es ein wenig optimieren, damit es sich ohne Argumente so verhält null
.)
Natürlich cat
fügten sie im realen Programm ein paar Schnickschnack hinzu, weil sie es immer tun. Aber das Wesentliche ist, dass der Aspekt der "Verkettung" überhaupt cat
keinen Aufwand kostet, weder für den Programmierer noch für die Maschine, die ihn ausführt. Die Tatsache, dass das Nichtvorhandensein solcher Programme cat
subsumiert null
und nocat
erklärt. Vermeiden Sie die Verwendung cat
eines einzelnen Arguments, wenn das Ergebnis in eine Pipeline eingeht, aber wenn es nur zum Anzeigen von Dateiinhalten auf dem Terminal verwendet wird, gibt selbst die von mir verlinkte Seite zu, dass dies eine nützliche Verwendung ist cat
, zögern Sie also nicht.
Sie können testen , die cat
wirklich durch eine einfache Schleife um eine hypthetical implementiert nocat
Funktionalität, durch den Aufruf cat
mit mehreren Dateinamen , unter denen ein ungültigen Name, nicht in der ersten Position: anstatt sofort beschwert , dass diese Datei nicht existiert, cat
zuerst die vorhergehenden Dumps gültige Dateien und beschwert sich dann über die ungültige Datei (zumindest verhält sich meine Katze so).