Ubuntu Suomen keskustelualueet

Ubuntun käyttö => Ohjelmointi, palvelimet ja muu edistyneempi käyttö => Aiheen aloitti: Snufkin - 18.12.25 - klo:11.30

Otsikko: Skripti-ongelma
Kirjoitti: Snufkin - 18.12.25 - klo:11.30
Moi!

Onnistuuko sellainen bash-skripti helposti, jossa skripti käynnistää taustalle prosessin (toisen ohjelman), odottaa sen tulosta (uutta tiedostoa) ja vasta sitten jatkaa omaa toimintaansa? Tuo prosessi saattaa kestää jopa minuutin. Vai odottaako se automaattisesti että edellinen komento on suoritettu loppuun? Vai pitääkö jollain käskyllä etsiä, että uusi tiedosto on jos olemassa?
(Ja kuten kysymyksestä voi päätellä, en ymmärrä asiasta paljoakaan, mutta olisi tällaiselle tarve. :) )

esim.
Koodia: [Valitse]
#!/bin/bash

echo "start processing..."
process1 file1:  luo tiedostoston file1, voi kestää minuutin tai pari.
process2 file1 file2:  ottaa tiedoston file1 syötteeksi ja luo tiedoston file2
cat file2

Otsikko: Vs: Skripti-ongelma
Kirjoitti: kamara - 19.12.25 - klo:08.03
Eikö putkitus toimi haluamallasi tavalla ?

Koodia: [Valitse]
echo "Toimiiko"|cat /dev/stdin


Haluamasi toiminta ...
eka.sh
Koodia: [Valitse]
touch lock.lck
sleep 1.1
touch file1.bin
echo Toimintaa... >file1.bin
echo "Toimiiko" >> file1.bin
sleep 5
rm lock.lck

toka.sh
Koodia: [Valitse]
sleep 0.1
while [ -f lock.lck ] ; do
sleep 0.1
done
echo file2 tehnyt > file2.bin
cat file1.bin >> file2.bin

ajaminen:
Koodia: [Valitse]
./eka.sh & ./toka.sh
Otsikko: Vs: Skripti-ongelma
Kirjoitti: Snufkin - 19.12.25 - klo:11.17
Eikö putkitus toimi haluamallasi tavalla ?

En tiedä, ei mulla ole noita ohjelmia vielä. Mutta pitäisi tehdä yksi kokonaisuus, jossa ensin muokataan tiedostoja valmiilla ohjelmalla, ja  niitä sitten käsitellään toisella omatekoisella. Tätä kokonaisuutta yritän nyt hahmottaa, mikä fisku lähestymistapa.
Otsikko: Vs: Skripti-ongelma
Kirjoitti: nm - 19.12.25 - klo:11.25
Moi!

Onnistuuko sellainen bash-skripti helposti, jossa skripti käynnistää taustalle prosessin (toisen ohjelman), odottaa sen tulosta (uutta tiedostoa) ja vasta sitten jatkaa omaa toimintaansa? Tuo prosessi saattaa kestää jopa minuutin. Vai odottaako se automaattisesti että edellinen komento on suoritettu loppuun? Vai pitääkö jollain käskyllä etsiä, että uusi tiedosto on jos olemassa?
(Ja kuten kysymyksestä voi päätellä, en ymmärrä asiasta paljoakaan, mutta olisi tällaiselle tarve. :) )

esim.
Koodia: [Valitse]
#!/bin/bash

echo "start processing..."
process1 file1:  luo tiedostoston file1, voi kestää minuutin tai pari.
process2 file1 file2:  ottaa tiedoston file1 syötteeksi ja luo tiedoston file2
cat file2

Toimii suoraan esimerkkiskriptin mukaisesti. Tässä "process1 file1" suoritetaan ensin loppuun, ja sen jälkeen ajetaan "process2 file1 file2". Komentotulkki ei suorita komentoja rinnakkain ellet erikseen pyydä sitä. Oletuksena komennot suoritetaan yksi kerrallaan, odottaen että ne valmistuvat.

Tarvittaessa voit vielä erikseen selvittää, että suoritettava prosessi on onnistunut tehtävässään tutkimalla sen lopetusarvoa (exit status) tai tarkistamalla, että prosessin luoma tiedosto on olemassa. Prosessien suorituksen voi ketjuttaa lopetusarvon perusteella esimerkiksi && tai || -operaattoreilla:

&& -operaattorilla seuraava komento suoritetaan vain jos edellisen suoritus on onnistunut, eli exit status on 0:
Koodia: [Valitse]
process1 file1 && process2 file1 file2
|| -operaattorilla seuraava komento suoritetaan vain jos edellisen suoritus on epäonnistunut, eli exit status poikkeaa nollasta:
Koodia: [Valitse]
process1 file1 || process2 file1 file2