[linux] hoe stdout en stdin van een subshell wijzigen?

Bram Mertens bram.mertens op sofico.be
Di Mrt 6 16:43:18 CET 2007


Hi
Ik ben momenteel op zoek naar een mooiere oplossing voor onderstaand 
probleem.  Ik geraak maar niet wijs uit het redirecten van de 
verschillende file descriptors...

Het probleem:
Vanuit een script wordt een binaire tool opgestart.
Deze tool (budb van Unify) wordt gebruikt om de transaction logfile van 
een databank netjes af te sluiten en aan de kant te zetten.
Deze tool vraagt echter eerst bevestiging, hier moet dus 'y' geantwoord 
worden.
Soms lukt het maken van de backup echter niet en vraagt deze tool via 
stdout of de backup afgebroken moet worden.
Op dat ogenblik moet er opnieuw 'y' geantwoord worden en moet het script 
verder lopen.

Momenteel gebruiken we het volgende:
while true
do
        sleep 1
        echo y
        sleep 70
        echo y
        echo "aborted" >> $ERRFILE
        break
done | budb -opties >> $LOGFILE

Dit werkt maar geeft telkens een melding "broken pipe" als het goed gaat 
aangezien er nog naar de pipe geschreven wordt terwijl budb netjes 
afgesloten is.

Volgens mij moet het mogelijk zijn om dit op te lossen door de file 
descriptor van de stdin en stdout van het subprocess te wijzigen voor budb 
opgestart wordt en vanuit het hoofdproces naar deze filedescriptor te 
schrijven.  Misschien zelfs conditioneel na het lezen van de stdout?

Maar zoals gezegd geraak ik er zelf niet wijs uit.

Bovendien is er misschien gewoon een betere oplossing en ben ik me blind 
aan het staren op een foute aanpak.

Graag jullie advies.

Bram




More information about the Linux mailing list