Du må være registrert og logget inn for å kunne legge ut innlegg på freak.no
X
LOGG INN
... eller du kan registrere deg nå
Dette nettstedet er avhengig av annonseinntekter for å holde driften og videre utvikling igang. Vi liker ikke reklame heller, men alternativene er ikke mange. Vær snill å vurder å slå av annonseblokkering, eller å abonnere på en reklamefri utgave av nettstedet.
  6 1285
Hei freaks!
Jeg prøver å lage et script i bash for å laste ned og installere en mod pack til Minecraft som en venn har laget.

Jeg har problemer med en while-løkke som jeg prøver å bruke for å finne ut om Minecraft kjører.

While-løkka ser slik ut:

while [ $(pgrep "JavaApplicationStub") != "" ]; do
sleep 1
done

pgrep "javaApplicationStub skal returnere tallet til prosessen javaApplicationStub når Minecraft kjører, og ingenting når det ikke kjører. Jeg vet at dette virker ved å ha testet det i terminalen.

Hadde vært fantastisk om noen kunne hjelpe meg

EDIT: Hele scriptet er her:
http://pastebin.com/ZkLrCt1U
Som dere ser er det meste kommentert ut. Dette er fordi at det er testet og virker.
Sist endret av Mort96; 8. januar 2013 kl. 22:34.
Tenk litt på logikken og hvorfor du bruker en while løkke.
Si at (pgrep "JavaApplicationStub" returnerer 99.

Kode

>>> 99 != ''
True
>>> '' != ''
False
while løkken vil alltid være sann så lenge input ikke er lik ''.
Viss ikke gjør den ikke noe,her vil en "if else blokk" gi mere menig.

Noe i denne stilen.

Kode

if [ $(pgrep "JavaApplicationStub") != ""  ]; then
	echo "Process exists,do stuff for this condtion"
else
	echo "Process do not exists,do stuff for this condtion"
Sist endret av snippsat; 9. januar 2013 kl. 16:44.
Men jeg må ha det som en while-løkke, da jeg ikke bare vil teste èn gang om Minecraft kjører. Jeg vil gjøre at programmet henger helt til Minecraft ikke kjører lenger.

Forresten, mangler ikke scriptet ditt fi? :3
Men jeg må ha det som en while-løkke, da jeg ikke bare vil teste èn gang om Minecraft kjører
Vis hele sitatet...
Da vil en while løkke som kjører hele tiden være en dårlig idé,sjanse for stort Cpu forbruk og låsing av prosess.
Du kan sette opp OS til og gjøre en schedule(cron) jobb,da vil belastning kun skje i det tidsintervall du velger.

Jeg har gjort akkurat dette før og sjekke om prosess kjører,da uten og bruke OS sin schedule,men schedule bygd inn i språket.
Det er da snakk om Python,dette fungerte bra og og ingen belasting av Cpu når prosessen ligger i bakgrunnen og kjører.

Du få prøve litt deg litt frem,viss det går skeis kan jeg poste kode for dette da i Python.
Python er pre installert på linux/Mac.

Forresten, mangler ikke scriptet ditt fi? :3
Vis hele sitatet...
Jo det stemmer var mere logikken jeg ville frem til,bruker bash lite
Høy CPU bruk er det nok liten sjanse formda jeg sover i 1 sekund mellom hver gang jeg sjekker.

Jeg er ikke så interessert i å gjøre dette i Phyton egentlig, kan allerede litt Bash og er ikke interessert i å lære meg et nytt språk kun for dette.

Hva tjener jeg på å bruke schedule i stedenfor while med 1 sekund sleep?

Kode

#!/bin/bash

SearchApp="JavaApplicationStub"
s=1

while [ x ]; do
        if [ "$(pgrep ${SearchApp})" != "" ]; then
                echo "$SearchApp found!"
        else
                echo "$SearchApp not found."
        fi
        echo "Check done, sleeping $s sec(s)."
        sleep $s
done
Prøv dette. Hvis du vil starte dette på serveren din og ha det kjørende i bakgrunnen, bruk:

Kode

./script.sh &
Sist endret av Nenzo; 9. januar 2013 kl. 18:31.
Takk Nenzo, det virket!