Warum zeigt es nichts? Warum ist es nicht zeigtShell-Skript kann keine Dateidaten an die Shell-Eingabe übergeben
April 2012
Su Mo Tu We Th Fr Sa
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
Warum zeigt es nichts? Warum ist es nicht zeigtShell-Skript kann keine Dateidaten an die Shell-Eingabe übergeben
April 2012
Su Mo Tu We Th Fr Sa
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
|
(anonyme Rohr) verbindet Stdout (1
) des ersten Prozesses mit Stdin (0
) des zweiten. Nachdem die Ausgabe in eine Datei umgeleitet wurde, gibt es kein stdout mehr, also gibt es nichts zu verschicken. Auch dann, wenn cat | cat < file
nicht wirklich Sinn macht, wird es zwei Eingänge an stdin verbunden (zumindest mit bash, Umleitung kommt später und „gewinnt“: echo uiae | cat <somefile
ausgeben wird der Gehalt an somefile)
Wenn Sie Ausgang eines angezeigt werden sollen Befehl und gleichzeitig in die Datei schreiben, verwenden Sie die tee
Binärdatei. Es schreibt in eine Datei, schreibt aber trotzdem in stdout
cal April 2012 | tee t | more
cat t # content of the above `cal` command
dies funktioniert für mich, wenn es keine vorhandene Datei t
im aktuellen Verzeichnis mit dem Namen. Ich benutze bash auf Ubuntu Oneiric.
$ cal April 2012 | cat > t | cat < t | more
April 2012
Su Mo Tu We Th Fr Sa
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
$ cal April 2012 | cat > t | cat < t | more
$ rm t
$ cal April 2012 | cat > t | cat < t | more
April 2012
Su Mo Tu We Th Fr Sa
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
Denn die ersten cat > t
all seinen Ausgang an einet
Datei namens sendet, für die Pipeline nicht mehr zu verlassen.
Wenn Ihre Absicht in eine Datei zu senden ist und durch more
zum Terminal, benutzen Sie einfach:
cal April 2012 | tee t | more
Dieses | cat < t
Konstrukt ist sehr seltsam, und ich bin nicht einmal sicher, ob es funktionieren würde. Es versucht, zwei völlig verschiedene Dinge mit dem Standard-Eingang von cat
zu verbinden und sicherlich unnötig.
'|' verbindet stdout (1) des ersten Prozesses mit stdin (0) des zweiten. Nachdem die Ausgabe in eine Datei umgeleitet wurde, gibt es kein stdout mehr, also gibt es nichts zu verschicken. Auch, Katze | cat macht keinen Sinn, es bekommt zwei Eingaben für stdin –
knittl
@knittl Also meinst du 'cat
also, gibt es eine andere Möglichkeit, dies zu tun? – Dewsworld