Toon posts:

Variabelen terug exporteren naar shell

Pagina: 1
Acties:

Verwijderd

Topicstarter
Goedendag,

Ik heb een script met daarin een x aantal if-jes. Op een gegeven moment word er een subscript gestart. Dit script mag maar 30 x tegelijk draaien maar moet in totaal meer dan 300 keer draaien. Dit heb ik opgelost met behulp van een tellertje. Omdat er een subscript gebruikt wordt draait deze in een andere shell. Om de variabele door te geven moet deze geëxporteerd worden. Dit doe ik met het commando export.
Tot dusver gaat het goed alleen komt nu het probleem. Als het subscript afgelopen is moet de teller met 1 verlaagd worden. Dit doet hij netjes in zijn eigen shell maar niet meer in de shell van het subscript.
Dit heeft als gevolg.

Start subscript
Hoofdscript teller + 1 (= 1)
Subscript teller =1 subscript is af teller = 0
Start subscript
Hoofdscript teller + 1 (= 2)
Subscript teller =2 subscript af teller = 1
Start subscript
Hoofdscript teller + 1 (= 3)
Subscript teller =3 subscript af teller = 2
Start subscript
Hoofdscript teller + 1 (= 4)
Subscript teller =4 subscript af teller = 3

Het verlagen van de var in de shell van het hoofdscript gebeurt hier dus niet. Dit is zeer essentieel. Natuurlijk word ook de var in het subscript geëxporteerd. Misschien is er een optie om de var van een andere shell te importeren maar ik kom er iig niet uit.

Ik hoop dat jullie er uit kunnen komen.
Alvast bedankt.

(P.S. Sorry voor de lange lap tekst :o )

  • zerok
  • Registratie: November 2001
  • Laatst online: 17-05 23:23

zerok

geen

Er is ook een edit knop!

ff ontopic kan je het niet naar een bestand schrijven? er is vast wel een mooiere manier maar dit is wat ik ff snel kan bedenken

"never argue with idiots they drag you down to their level and beat you with experience" dilbert


  • Asphyxion
  • Registratie: November 1999
  • Laatst online: 20:10

Asphyxion

I am, therefor I think

Dat kan (iirc) niet. Je kan van een child shell niets meegeven aan de parent shell. Andersom is geen probleem...

Verwijderd

Je kan het child script wel sourcen:

t1.sh
code:
1
2
3
4
#/usr/bin/ksh
A=10 ; export A
. ./t2.sh
echo $A


t2.sh
code:
1
2
A=5
export A


De output van T1 zal nu 5 zijn... Dus heb je in het t2 script de locale waarde van t2 veranderd... Trouwens de exports zijn niet echt nodig en ook niet toepasselijk in deze situatie..

[ Voor 0% gewijzigd door Verwijderd op 31-10-2002 16:22 . Reden: exports ]


  • Wilke
  • Registratie: December 2000
  • Laatst online: 19:14
Hmmm...het kan wel, maar volgens mij doe je onnodig moeilijk.

Als je het nou eens zo gaat doen, op de plaats waar het subscript gestart moet worden:

code:
1
2
3
4
5
while [ `ps faxuww | grep "<naamvanhetsubscript>" | wc | awk '{print $1}'` -gt 30 ]; do
  echo "Wacht op vrij slot om subscript te draaien..."
  sleep 5; # of groter getal als het draaien van het subscript i.h.a. lang duurt
done;
<aanroep subscript>


Dit is niet al te 'threadsafe' maar dat is jouw oplossing waarschijnlijk ook niet.

Trouwens als je het toch per se op deze manier wil, dan moet je het subscript uitvoeren met 'source' of '.'. In je hoofdscript komt dan te staan:
source <naam van subscript> of (hetzelfde):
. <naam van subscript> # Let op de spatie tussen . en naam van subscript! bv. dus '. ./mijnsubscriptje' - raak niet in verwarring door het aantal puntjes :)

Als je dan in het subscript dingen exporteert zal dat ook in de hoofdshell zo blijven.


Edit: een paar toevoegingen....

|:( terwijl ik mijn post tikte heeft us1111 hetzelfde gezegd...heb ik weer :)

Verder een paar opmerkingen over de posts hierboven:

1. console-boy, je hoeft niet te groeten in je beginpost (zie FAQ voor hoe en waarom)
2. Critical mass: 3 posts binnen een minuut en zonder ook maar enige inhoud...gebruik sowieso de edit knop!
3. De 2e t/m 5e post hebben helemaal geen inhoud, dit is tamelijk irritant voor andere lezers, leuk dat jullie bij elkaar op school zitten ofzo, maar ga dan met elkaar ICQen of IRL praten ofzo :P

Verwijderd

Topicstarter
Thanx voor de reply's. Ik ga bovenstaande morgen gelijk proberen.

Enorm bedankt.

  • Jordi
  • Registratie: Januari 2000
  • Niet online

Jordi

#1#1

Een aantal replies gedelete. Gaarne ontopic replyen.

Okee, horen we het dan wel. Succes ermee :)

Het zal wel niet, maar het zou maar wel.


Verwijderd

Topicstarter
Ik heb het bovenstaande inmiddels geprobeerd maar als ik in de subscriptjes een sleep stop zie ik in PS wel het sleep commando maar niet het script naam zelf. Dit komt waarschijnlijk doordat het proces in de achtergrond word gestart.
Is hier een commando voor? Zoniet, zal het wegschrijven naar een bestand een goede oplossing zijn? Zoja, hoe hebben jullie dit dan ongeveer in gedachten?

  • Wilke
  • Registratie: December 2000
  • Laatst online: 19:14
code:
1
2
3
4
5
6
7
cat >script.sh
#!/bin/bash
sleep 60
Ctrl-D
chmod +x script.sh
./script.sh &
ps x | grep "script\.sh"


Geeft:
5628 pts/0 S 0:00 /bin/bash ./script.sh

Dus het komt wel voor, maar het is een parameter van 'bash', de parameter 'x' (van ps) zorgt er zo te zien voor dat 'ie dat ook laat zien :)

Verwijderd

Topicstarter
Je hebt helemaal gelijk.
Ik heb een fout in mijn script gemaakt.
Enorm bedankt voor de scripts en het nieuwe id van een script.

  • Buffy
  • Registratie: April 2002
  • Laatst online: 26-12-2024

Buffy

Fire bad, Tree pretty

Probeer het ook eens met het command 'trap'

code:
1
2
3
4
5
6
7
8
9
10
#!/bin/sh

set -o monitor  # zet job control aan voor interactieve shells :)

trap 'let x=$x+1; echo "x = $x"' SIGCHLD
let x=0
sleep 1&
sleep 1      # geen & 
sleep 1&
echo "klaar, x = $x"


Edit: Uit 'man bash'
code:
1
2
3
4
When bash is waiting for an asynchronous  command  via
the  wait  builtin, the reception of a signal for which a trap has been
set will cause the wait builtin to return immediately with an exit sta-
tus greater than 128, immediately after which the trap is executed.


Dus als je een volle bak hebt kun je mbv wait wachten tot er weer een slot vrij komt.

That which doesn't kill us, makes us stranger - Trevor (AEon FLux)
When a finger points at the moon, the imbecile looks at the finger (Chinese Proverb)

Pagina: 1