Ich habe von "unnützem Gebrauch von Katze" gehört und einige Vorschläge gefunden, aber die folgenden Ausgaben enthalten nichts in meiner Bash-Shell.
< filename
Die Verwendung von cat funktioniert jedoch wie erwartet.
cat filename
Ich verwende Fedora Core 18 und GNU Bash, Version 4.2.45 (1).
BEARBEITEN: Die Verwendung vor einer Pipe funktioniert auch nicht.
< filename | grep pattern
Während mit Katze funktioniert wie erwartet.
cat filename | grep pattern
EDIT2: Zur Verdeutlichung weiß ich, dass ich das nutzen kann
grep pattern < filename
aber ich lese hier /programming/11710552/useless-use-of-cat, dass ich es auch vor dem befehl benutzen kann. Es funktioniert jedoch nicht vor dem Befehl.
bash
shell
io-redirection
cat
Fehler
quelle
quelle
Antworten:
Das Symbol kleiner als und (
<
) öffnet die Datei und hängt sie an das Standard-Eingabegerät-Handle einer Anwendung / eines Programms an. Sie haben der Shell jedoch keine Anwendung zum Anhängen der Eingabe gegeben.Beispiel
Diese beiden Beispiele tun im Wesentlichen das Gleiche, aber sie werden auf zwei leicht unterschiedliche Arten eingegeben.
öffnet die Datei
öffnet STDIN
Hinter den Vorhang spähen
Sie können verwenden, um
strace
zu sehen, was los ist.Wenn wir aus einer Datei lesen
Wenn wir aus STDIN lesen (identifiziert als 0)
Im ersten Beispiel können wir sehen, dass
cat
die Datei geöffnet und daraus gelesen wurdeblah.txt
. In der Sekunde können wir sehen, dasscat
der Inhalt der Dateiblah.txt
über den STDIN-Dateideskriptor gelesen wird, der als Deskriptornummer 0 identifiziert wird.quelle
cat
aber allgemein missverstanden und verwendet, wenn es nicht notwendig ist.< filename command
.Die klassische nutzlose Verwendung von
cat
ist die Eingabe in Programme, die perfekt in der Lage sind, Dateien direkt zu öffnen. Beispielsweise:Schlecht
Gut
Auch gut (die
<file
kann auf beiden Seiten des Befehls sein)quelle
cat
.cat
umfassen (1)cat file
(mit Ausgabe auf den Bildschirm / Terminal, obwohl, wenn die Datei länger ist als der Bildschirm hoch ist, Sie könnten es vorziehen , zu verwenden ,more
oderless
oder so ähnlich), (2)cat file1 file2 file3 > all_data
( genau das , wofürcat
es gedacht ist), (3)cat f1 f2 f3 | tr …
(oder leiten Sie es an ein anderes Programm weiter, an das Sie die Dateien nicht direkt übergeben möchten, z. B.wc
(z. B. wenn Sie nur die Gesamtsumme anzeigen möchten) odergrep
(zB, wenn Sie eine alte Version haben, die das nicht unterstützt-h
,--no-filename
zB)),… (Fortsetzung)cat -n file | sort … -k1 | sed 's/^ *[0-9]*\t//'
, (5)sudo cat file600 | untrusted_program
(dh Sie (Ihre UID) können die Datei nicht lesen, und Sie möchten das Programm nicht als root oder als halbprivilegierte UID ausführen). Auch ( e ) (dh eine Zahl zwischen 2 und 3)program_that_generates_html | cat static_html_header - static_html_footer
(die Sie wahrscheinlich zu einer Datei oder einer Pipe umleiten möchten).Das UUOC ist in:
oder
Dort
some-cmd
wird der Inhaltsomefile
von einer Pipecat
gelesen, von der aus er selbst gelesen wirdsomefile
.some-cmd
kann direkt von lesensomefile
(nachdem die Shell es für stdin geöffnet hat), gibt es keine Notwendigkeit fürcat
:oder
(Umleitungen können überall in einer einfachen Befehlszeile erscheinen).
quelle