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.