Hallo, Leute!
Ich würde gerne einen möglichst einfachen Befehl haben, mit Hilfe dessen zwei Programme miteinander kommunizieren können. Ein simples Beispiel sind die nachfolgenden Programme 1 und 2:
Code:
#!/usr/bin/awk -f
#BEGIN{
#print 0.3;
#fflush();
#}
{
print $1+1;
fflush();
}
und
Code:
#!/usr/bin/awk -f
($1 > 100) {exit 0;}
{
print $1*10;
fflush();
}
Für die, die des awk nicht mächtig sind: Programm 1 liest den ersten Wert einer Zeile ein und gibt Wert+1 aus, Programm 2 gibt Wert*10 aus und bricht bei 100 ab.
Mit Fifos ist das ganz einfach:
Code:
mkfifo in
<in ./1.awk | ./2.awk >in &
echo 0.3 > in
Den echo-Befehl kann (sollte) man dabei weglassen, wenn in Programm 1 der BEGIN-Block nicht ausgeklammert ist. Die Kommunikation ist dann
Code:
0.3
1.3
13
14
140
141
Soweit, so gut. Meine Frage ist nun, wie man das Ganze ohne so eine temporäre Fifodatei hinbekommt. Mein Ansatz war
Code:
exec 3<>/dev/null
<&3 ./1.awk | ./2.awk >&3
Hier ist der BEGIN-Block also eingeklammert. Aber es klappt so oder so nicht. Hat da jemand eine schöne Lösung parat? Geht’s vielleicht auch mit den Standarddeskriptoren 0 und 1? Und kann man die Kommunikation von außen vielleicht so anstoßen wie im obigen Fifo-Beispiel?
Eigentlich kann das doch nicht so schwer sein, aber ich habe schon viel im Netz gesucht …
Dann noch einen guten Rutsch,
Frank
Lesezeichen