Was geht mit Pipes, was nicht?

Post Reply
Message
Author
gaiusbonus
Posts: 3
Joined: 11. Apr 2005 22:22

Was geht mit Pipes, was nicht?

#1 Post by gaiusbonus »

Hallo,

ich bin Frischling!

Ich versuche in einem Script Verzeichnisse anzulegen, die nach aktuellem Datum mit Zeit benannt sind.

date +%Y gibt mir 2005
warum funzt folgendes nicht:
date +%Y | md
Kann ich per Pipe nur Ausgaben umleiten an Befehle, die Dateien einlesen können?

Danke!

Jochen

gaiusbonus
Posts: 3
Joined: 11. Apr 2005 22:22

#2 Post by gaiusbonus »

Die Frage nach dem "was geht" bleibt, mein Problem hab ich grad mit "Rückwärtsdüdeln" gelöst!
md `date +%Y`

Jochen

klopskuchen
prolinux-forum-admin
Posts: 1444
Joined: 26. Jun 2004 21:18
Contact:

#3 Post by klopskuchen »

Hi!

Da gibt es leider nur eine ziemlich blöd klingende Antwort: manpage lesen.
Entscheidend ist die Substitution der Shell. Je nachdem wie viel Befehle und
in welcher Reihenfolge diese abgearbeitet werden (sollen), kann es zu unter-
schiedlichen Ergebnissen kommen. -> man bash

Für Fälle wie deinen eignet sich "xargs". Xargs übernimmt die Ausgabe eines
Programmes und liefert sie einem anderen Programm als Argument.
Beispiel:
date +%Y |xargs mkdir

MfG
When all else fails, read the instructions .

User avatar
Scory
Posts: 188
Joined: 16. Apr 2004 12:36

#4 Post by Scory »

>Kann ich per Pipe nur Ausgaben umleiten an Befehle, die Dateien einlesen können?

Genau! Das erklärt auch den Begriff "Pipe" (wie "Pipeline"), das ist das Rohr, wo die Daten von einem Prozess zum anderen fließen. Pipes sind also nur für Programme geeignet, die vom sog. "Standard Input" Daten einlesen können. Das Programm "md" ist nicht dazu in der Lage, sondern erwartet ausschließlich auf der Kommandozeile die Parameter.

Programme, die man "pipe-fähig" nennen würde heißen im Fachjargon "Filterprogramm" - sie sind quasi der Datenfilter der Pipes. Typische Filter sind "sort", "grep", "sed" und viele viele mehr. Zwar erwarten alle diese Programme *auch* Kommandozeilenparameter, aber die kann man ja trotzdem angeben, auch wenn der eigentliche Datenstrom "gepiped" wird. Beispiel:

ps -fe | grep -v ps

Das obige Progrämmchen zeigt alle aktuellen Prozesse an, nur nicht die, wo "ps" drin vorkommt - also alle außer sich selbst. Doofes Beispiel, aber ich hoffe trotzdem, der Sinn ist erkennbar.

Post Reply