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
Was geht mit Pipes, was nicht?
-
- Posts: 3
- Joined: 11. Apr 2005 22:22
-
- prolinux-forum-admin
- Posts: 1444
- Joined: 26. Jun 2004 21:18
- Contact:
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
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 .
>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.
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.