Hinweis: Das Forum wird geschlossen! Neue Registrierungen sind nicht mehr möglich!

 Zurück zu Pro-Linux   Foren-Übersicht   FAQ     Suchen    Mitgliederliste
``Y-Pipe''

 
Neuen Beitrag schreiben   Auf Beitrag antworten    Pro-Linux Foren-Übersicht -> Programmieren - Allgemein
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
bakunin



Anmeldungsdatum: 16.08.1999
Beiträge: 597
Wohnort: Lorsch (Südhessen)

BeitragVerfasst am: 10. Feb 2002 16:46   Titel: ``Y-Pipe''

Hi!

Um stdout und stderr in separate Kommandos zu pipen, verwendet man:

(programm | stdout-verarbeitung >/dev/tty 2>&1) 2>&1 | stderr-verarbeitung

Allerdings wollte ich dafür nun eine Funktion einrichten, damit man es so verwenden kann:

ypipe "programm" "stdout-verarbeitung" "stderr-verarbeitung"

Ich habe das nun so implementiert:

ypipe ()
{
($1 | $2 >/dev/tty 2>&1) 2>&1 | $3
}

Hierbei wurden die Variablen ganz bewusst nicht gequotet, damit das jeweils angegebene Kommando ausgeführt wird. das funktioniert bei einfachen Kommandos, aber wenn ich für $2 z.B. so etwas wie "(echo foo; cat)" angebe (beim Aufruf mit den ""), ist das Resultat die Meldung, dass das Kommando "(echo" nicht gefunden werden konnte. Es von Hand in das große Konstrukt einzufügen, funktioniert hingegen.

Mich interessiert gar nicht so sehr, wie ich das zum Laufen kriege, sondern umso mehr, warum es nicht funktioniert wie erwartet.

Cheers,
GNU/Wolfgang

PS: GNU bash, version 2.03.0(1)-release (i386-pc-linux-gnu)
 
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen

arni
Gast





BeitragVerfasst am: 10. Feb 2002 18:06   Titel: Re: ``Y-Pipe''

Hast du mal eval probiert?

ypipe ()
{
( eval $1 | eval $2 >/dev/tty 2>&1) 2>&1 | $3
}
 

bakunin



Anmeldungsdatum: 16.08.1999
Beiträge: 597
Wohnort: Lorsch (Südhessen)

BeitragVerfasst am: 10. Feb 2002 21:00   Titel: Re: ``Y-Pipe''

Hi!

Aha, wenn man vor das $3 dann noch ein eval schreibt, sacheint es perfekt zu funktionieren. Danke, Arni. :)

Cheers,
GNU/Wolfgang
 
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen

Jochen
Gast





BeitragVerfasst am: 11. Feb 2002 11:48   Titel: Re: ``Y-Pipe''

Hi Wolfgang,

das Konstrukt (Beispiel aus dem Start-Posting) ist mir vollkommen unbekannt gewesen. Wieder was gelernt, nur stecke ich jetzt in der Klemme, dass ich nicht weiss, wieso es funktioniert. Soweit ich es bis jetzt kapiert habe:

1. Die Shell setzt eine Subshell auf wg. der runden Klammern. Deren stderr geht an stdout und damit über Pipe an das Kommando zur "stderr-verarbeitung". Sämtliche stderrs der in den runden Klammern eingeschlossenen Kommandos sollten dort aufschlagen, wenn nicht eine explizite Umlenkung vorgenommen wird.

2. In der Subshell läuft "programm" an, dessen stdout ganz normal über Pipe an "stdout-verarbeitung" weitergegeben wird. Alle stderr-Meldungen von "programm" zappeln über die Subshell-Umleitung nach "stderr-verarbeitung". Ahhh.... Das was der Punkt, glaube ich...

3. "stdout-verarbeitung" lenkt seine stdout ans tty und sein stderr dahin, wohin stdin schon zeigt, also auch /dev/tty. Keine seiner Ausgaben stören damit "stderr-verarbeitung".

Ja, jetzt ist es klar. Danke für's Zuhören, Wolfgang! Manchmal muss ich so Sachen jemanden erklären, um es selbst zu verstehen. Da es noch jemand nützen könnte, lasse ich es mal stehen.

Jochen
 

Beiträge vom vorherigen Thema anzeigen:   
     Pro-Linux Foren-Übersicht -> Programmieren - Allgemein Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehen Sie zu:  

Powered by phpBB © phpBB Group
pro_linux Theme © 2004 by Mandaxy