Sie können den Inhalt nicht file1 > file2
kopieren file1
, file2
da dort kein Befehl vorhanden ist. Sie müssen einen Befehl ausgeben.
- Umleitungen gelten für (1) einen Befehl, den Sie ausführen, oder (2) die Shell als Ganzes (falls auf das integrierte
exec
Element angewendet). Sie ändern jedoch die Quelle oder das Ziel von Aktionen, die Eingabe-Ausgangs-Operationen ausführen, dh aus einer Datei oder einem Gerät lesen oder in diese schreiben. Sie müssen tatsächlich eine Aktion ausführen.
file1 > file2
ist ein gültiger Befehl, unter Umständen aber nicht kopiert nicht file1
zu file2
. Stattdessen wie l0b0 sagt , versucht es , zu laufen file1
als ein Programm oder Skript, und - ob oder nicht , die erfolgreich ist - sendet die Standard - Ausgabe vom Laufen file1
in file2
. (Wenn file2
es sich um eine reguläre Datei handelt, wird diese überschrieben.)
Es ist verlockend zu glauben, dass so etwas <file1 >file2
funktionieren würde. Dies ist jedoch nicht der Fall: Wenn Sie den Befehl weglassen, wird keine Operation ausgeführt. file1
wird als Eingabe verwendet und file2
wird als Ausgabe verwendet ... aber da nichts getan wird , ist die Ausgabe leer. Der einzige Effekt besteht darin, (a) zu erstellen, file2
wenn sie noch nicht vorhanden war, oder (b) file2
leer zu machen, wenn dies der Fall war ::
ek@Ilex:~$ echo foobar > file1
ek@Ilex:~$ echo quux > file2
ek@Ilex:~$ cat file1
foobar
ek@Ilex:~$ cat file2
quux
ek@Ilex:~$ <file1 >file2
ek@Ilex:~$ cat file2
ek@Ilex:~$ file file1 file2
file1: ASCII text
file2: empty
Du willst wahrscheinlich nur rennen cp file1 file2
.
Angenommen, es handelt sich file2
um eine reguläre Datei (oder existiert nicht, aber Sie möchten, dass sie nach der Ausführung Ihres Befehls als reguläre Datei existiert), sollten Sie den cp
Befehl wahrscheinlich einfach verwenden .
Wie Sylvain Pineau sagt , können Sie auch verwenden cat file1 > file2
. Der cp
Befehl verhält sich jedoch gut, wenn in eine bereits vorhandene Datei geschrieben wird: Er überschreibt das Ziel mit der Quelle, behält jedoch die ursprüngliche Berechtigungsmaske des Ziels bei (und ist daher auch in Situationen gut, in denen man intuitiv denken könnte, dass dies cat file1 > file2
erforderlich ist):
ek@Ilex:~$ echo glockenspiel > file1
ek@Ilex:~$ echo flugelhorn > file2
ek@Ilex:~$ cat file1
glockenspiel
ek@Ilex:~$ cat file2
flugelhorn
ek@Ilex:~$ chmod +x file2
ek@Ilex:~$ ls -l file1 file2
-rw-rw-r-- 1 ek ek 13 Sep 16 03:28 file1
-rwxrwxr-x 1 ek ek 11 Sep 16 03:28 file2
ek@Ilex:~$ cp file1 file2
ek@Ilex:~$ cat file2
glockenspiel
ek@Ilex:~$ ls -l file1 file2
-rw-rw-r-- 1 ek ek 13 Sep 16 03:28 file1
-rwxrwxr-x 1 ek ek 13 Sep 16 03:28 file2
Zum Anhängen möchten Sie wahrscheinlich eine (andere) Umleitung.
Sowohl der cp
Befehl und Umleitung mit >
wird überschreiben den Inhalt einer normalen Datei, wenn es vorhanden ist . Die >>
Umleitung wird jedoch angehängt.
Also , wenn Sie den Inhalt angehängt werden sollen , file1
um file2
statt Überschreiben file2
mit dem Inhalt file1
, eine Umleitung mit >>
( nicht >
) ist eine gute Wahl:
ek@Ilex:~$ echo 'Violets are blue.' > file1
ek@Ilex:~$ echo 'Roses are red.' > file2
ek@Ilex:~$ cat file1
Violets are blue.
ek@Ilex:~$ cat file2
Roses are red.
ek@Ilex:~$ cat file1 >> file2
ek@Ilex:~$ cat file2
Roses are red.
Violets are blue.
cp
. Ich interpretiere die Frage des OP jedoch so, wie man aus einer Datei im Allgemeinen eine Pipe erstellt. In diesem Sinne ist dies die beste Antwort. Kurz gesagt,cat
ist ein wesentlicher, allgemeiner Befehl für viele Befehlszeilenaufgaben.|
). Eine Frage zum Umleiten von einer Datei im Allgemeinen würde Antworten erfordern, die erklären, wie zum Umleiten von Dateien mit<
, wie es die Antworten von nux und Stephen Quan tun, aber weder diese noch meine Antwort.Um die Antwort von @ SylvainPineau zu erweitern , können Sie dies nicht tun,
/root/Documents/text1.txt > /root/Documents/text2.txt
weil das Ding vom Umleitungsoperator und der Datei getrennt ist, nachdem es ein Befehl sein muss. Wenn Sie ausführen/root/Documents/text1.txt > /root/Documents/text2.txt
, weisen Sie die Shell an, ausgeführt zu werden/root/Documents/text1.txt
, was wahrscheinlich nicht einmal ausgeführt wird, da für Textdateien das Ausführungsflag nicht gesetzt sein sollte, und die Standardausgabe in speichern/root/Documents/text2.txt
. Da die Standardausgabe dieses "Befehls" leer ist, ist die Zieldatei leer.quelle
> out date
schreibt die aktuelle Zeit erfolgreich in die Datei "out".Befehlsausgabe Umleitung:
ls gibt eine Verzeichnisliste an und die Ausgabe des Befehls ls wird in file.txt umgeleitet.
Fehlerumleitung:
Dadurch wird das Fehlerergebnis des Befehls in eine
txt
Datei umgeleitet .Für die Umleitung von Dateiinhalten:
cat file1 > file2
(kopiert den Inhalt von Datei1 in eine neue Datei Datei2)cat file2 >> file1
(Hier wird der Inhalt von Datei2 in eine vorhandene Datei1 kopiert, ohne den Inhalt zu löschen.)cat file1 file2 > file3
(Dies würde den Inhalt von 'Datei1' und 'Datei2' hinzufügen und diesen Inhalt dann in eine neue Datei mit dem Namen 'Datei3' schreiben.)Ich möchte auch The Input Redirection hinzufügen:
Wenn sich der E-Mail-Text in einer Datei befindet, können wir ihn direkt zum Senden der E-Mail verwenden.
quelle
Wie andere bereits gesagt haben, fehlt Ihnen ein Befehl. Hier sind einige interessante Kombinationen:
Der Geist des Weiterleitens / Umleitens zeigt an, dass ein Befehl (wie Kopieren, Extrahieren, Zählen, Codieren / Decodieren, Komprimieren / Dekomprimieren) erforderlich ist, um die Aktion zum Umwandeln der Eingabe
file1.txt
in eine Ausgabe anzugebenfile2.txt
.quelle