[Bash] Backgrounded proces variabele laten setten werkt niet

Pagina: 1
Acties:

  • Spider.007
  • Registratie: December 2000
  • Niet online

Spider.007

* Tetragrammaton

Topicstarter
Ik ben bezig met een vervanger voor het commando `top`; in een bash-script. Ik loop tegen het probleem aan dat er verschil lijkt te bestaan tussen een normale en een backgrounded job. Een voorbeeld maakt eea waarschijnlijk wel duidelijk :)
code:
1
2
a=`vmstat 1 5`
echo $a
Dit werkt goed. Na 5 seconden krijg ik netjes de output van het vmstat commando. Echter; dit werkt niet:
code:
1
2
a=`vmstat 1 5`&
echo $a
Zowel na 1 seconde, als na 5 seconden, als na 10 seconden levert $a mij geen output op. Hoe kan dit? Ik heb dit nodig om te voorkomen dat commando's die lang duren mijn script tegenhouden om korte opdrachten wel weer te geven; zoals een ps-list.

Overigens ben ik bezig op een Sun Solaris machine. Hebben jullie enig idee wat de reden is van bovenstaand probleem; of een mogelijke andere oplossing? :)

---
Prozium - The great nepenthe. Opiate of our masses. Glue of our great society. Salve and salvation, it has delivered us from pathos, from sorrow, the deepest chasms of melancholy and hate


  • Elijan9
  • Registratie: Februari 2004
  • Laatst online: 10-02 13:34
Dit doet bash:
• De `vmstat 1 5` wordt als eerste geevalueerd.
• Daarna is de tekst die op de plek moet komen van de ` ... ` bekend en wordt ingevuld.
In het eerste geval wordt dit "a=iets", in het tweede geval "a=iets &".
In het tweede geval wordt de assignment aan a geforked en bestaat niet in het (parent) proces.
• In het parent proces wordt "echo $a" uitgevoerd, daar is de waarde niet van bekend voor het tweede geval...

Het kan wel andersom, dus:
code:
1
2
a=`vmstat 1 5`
echo $a &


Ook kunnen beide statements in hetzefde childproces, dus:
code:
1
2
3
4
(
a=`vmstat 1 5`
echo $a 
&)


Misschien heb je daar wat aan...?

[ Voor 33% gewijzigd door Elijan9 op 28-02-2005 20:07 . Reden: aanvullingen ]

War is when the young and stupid are tricked by the old and bitter into killing each other. - Niko Bellic


  • Spider.007
  • Registratie: December 2000
  • Niet online

Spider.007

* Tetragrammaton

Topicstarter
Ik neem aan dat je met je laatste voorbeeld dit bedoelt?
code:
1
2
3
4
(
a=`vmstat 1 5`
echo $a 
)&
Dat werkt goed; alleen zadelt het mij met hetzelfde probleem op. Wat ik wil bereiken is dat ik bijvoorbeeld a=`vmstat 1 5`; en b=`netstat` onafhankelijk van elkaar kan laten loopen. Daarnaast krijg ik dan een weergave applicatie die simpelweg $a en $b echo't. De weergave wordt iedere seconde geupdate; en de data die wordt weergegeven wordt onafhankelijk ververst. Is dit echt alleen mogelijk door naar tijdelijke bestanden te schrijven?

---
Prozium - The great nepenthe. Opiate of our masses. Glue of our great society. Salve and salvation, it has delivered us from pathos, from sorrow, the deepest chasms of melancholy and hate