Sziasztok!
A következő lenne a problémám: Java programból hívok egy bash scriptet. A script futtatása után az exitValue() függvénnyel szépen látom, hogy sikeres volt-e a futtatás. A gondom csak az, hogy ez az érték az utolsó sor eredményét adja vissza. Ha mondjuk a script így néz ki:
#!/bin/bash
mkdir /home/users/home21
Akkor ha már létezik a 21-es könyvtár, szépen hibaüzenettel kilép, amit Javaban is megkapok.
Viszont ha a script már két soros (és a 21-es könyvtár szintén létezik):
#!/bin/bash
mkdir /home/users/home21
mkdir /home/users/home21/files
A második sor hibátlanul lefut, és hibakód nélkül tér vissza a futás a Java kódhoz.
Meg lehet az oldani, hogy bármely sornál ahol hiba van, ott kilépjen és ne futtassa tovább a scriptet?
------------------------------------------------------------------------------------------------------
Köszönöm a segítséget és a gyors válaszokat.
- 1699 megtekintés
Hozzászólások
Talán így:
#!/bin/bash
mkdir /home/users/home21 || exit 1
--
Elméletileg nincs különbség elmélet és gyakorlat között. Gyakorlatilag van.
- A hozzászóláshoz be kell jelentkezni
... vagy esetleg igy:
#!/bin/bash
mkdir /home/users/home21
if (( $? )); then exit 1 ; fi
mkdir /home/users/home21/files
- A hozzászóláshoz be kell jelentkezni
Man bash, set -e. Egyébként pedig triviális, minden parancs után raksz 2 db & jelet, kivéve a legutolsót - valahogy így:
mkdir ize &&
mkdir ecet &&
cd ide &&
cd oda &&
cd amoda &&
ezt csinalom &&
meg azt csinalom
- A hozzászóláshoz be kell jelentkezni
#!/bin/bash
ret_val=0
mkdir /home/users/home21
ret_val=$[ret_val+$?]
mkdir /home/users/home21/files
ret_val=$[ret_val+$?]
....
exit $ret_val
Hoppá, rosszul olvastam a követelményt, de most már nem törlöm ki... :D
--
Coding for fun. ;)
- A hozzászóláshoz be kell jelentkezni
OT: a $[ a + b ]
forma helyett javaslom a $(( a + b ))
szerkezetet. Az utóbbi ugyanis nem *csak* bash-ban működik, hanem másban *is*.
- A hozzászóláshoz be kell jelentkezni
Jogos. Azonban itt bash-t hív a szkript. ;)
--
Coding for fun. ;)
- A hozzászóláshoz be kell jelentkezni
Node miért ne tanuljon valaki portábilis módszert, ha kb ugyanannyiba kerül, mint a nem-hordozható?
- A hozzászóláshoz be kell jelentkezni
:D Már megint nálad a 10 pont na... :) Nem vagyok ma formában... Szerintem inkább elmegyek golfozni egy picit... Értelmetlen játék, de legalább megfelelően sznob. :D
--
Coding for fun. ;)
- A hozzászóláshoz be kell jelentkezni
A fenti megoldasok mind eleg csunyak, szerintem ez kell neked:
#!/bin/bash
set -o errexit
mkdir /home/users/home21
mkdir /home/users/home21/files
Lasd meg itt: http://www.davidpashley.com/articles/writing-robust-shell-scripts.html
- A hozzászóláshoz be kell jelentkezni
Es szerinted ez a szep? :p b0b0-nak nyilvan fogalma sincs, hogyan lehet lekerdezni a visszateresi erteket es hogyan lehet esetleg egy picit bonyolultabb hibakezelest megvalositani (nem csak kilepni). Na most ezen a peldan keresztul ezt tovabbra sem fogja elsajatitani. Egyebkent az altalad belinkelt oldal is emliti a fenti "eleg csunya" megoldast/megoldasokat, amennyiben az ember egy kicsit tobb kontrollt akar a szkriptjei folott ;) De nyilvan a 'set -o errexit' tokeletes, ha csak az a cel, hogy
bármely sornál ahol hiba van, ott kilépjen és ne futtassa tovább a scriptet
Azert bele ne halljunk a szepsegbe! ;)
- A hozzászóláshoz be kell jelentkezni
Olvasni te se tudsz. Második megszólalóként így kezdtem: set -e. Másképpen: set -o errexit.
- A hozzászóláshoz be kell jelentkezni