Subshell - kilepes az egesz szkriptbol

Sziasztok!

Celom, hogy a szkriptem ne csak a sunshellbol, hanem az egesz szkriptbol lepjen ki.. Ezer oldalt lehet talalni a neten, hogy az exit a subshellben nem fog kilepni az egesz szkriptbol:

pl: http://tldp.org/LDP/abs/html/subshells.html


COMMAND1
COMMAND2
COMMAND3
(
IFS=:
PATH=/bin
unset TERMINFO
set -C
shift 5
COMMAND4
COMMAND5
exit 3 # Only exits the subshell!
)
# The parent shell has not been affected, and the environment is preserved.
COMMAND6
COMMAND7

Hogyan tudnam azt megcsinalni, hogy rogton az egesz szkriptbol lepjen ki?

Hozzászólások

Esetleg ez?

COMMAND1
COMMAND2
COMMAND3

(
COMMAND4
COMMAND5
exit 0 # ok
exit 1 # exit
) || exit

COMMAND6
COMMAND7

--
maszili

esetleg szignalozas?


COMMAND1
COMMAND2
COMMAND3
parent=$$
trap 'exit 1' SIGUSR1
(
IFS=:
PATH=/bin
unset TERMINFO
set -C
shift 5
COMMAND4
COMMAND5
if [ ... ] ; then kill -USR1 $parent ; fi
...
)
# The parent shell has not been affected, and the environment is preserved.
COMMAND6
COMMAND7

koszi a valaszokat!

maszili sajnos az nem lesz jo, mert a subshellben hiaba van exit kod, azt nem fogja erzekelni a parent shell

signalozas meg vegso megoldasok egyike lehetne..

Van egy konkret peldam, ami talan meg jobban specifikalja a problemat:

ssh root@node "grep -q 32434 /etc/passwd || ( echo 'UID is not unique!'; exit 122 ); command 2;

es az a baj, hogy ha nem talaja a userid-t akkor is tovabb megy.

------
dworld

"maszili sajnos az nem lesz jo, mert a subshellben hiaba van exit kod, azt nem fogja erzekelni a parent shell"

Kipróbáltam...

maszili@maszili:~$ echo "1" ; (echo "2" ; exit 0) || echo "exit" ; echo "3"
1
2
3
maszili@maszili:~$ echo "1" ; (echo "2" ; exit 1) || echo "exit" ; echo "3"
1
2
exit
3
maszili@maszili:~$

Ha az echo "exit" helyere exit-et teszel akkor befejeződik

--
maszili

Magat az exit kodot nem fogja erzekelni, valoban, viszont a subshell ilyenkor kilep, es beallitja a $? valtozo erteket egy 0-tol eltero ertekre, amit mar lehet figyelgetni. Jo lenne tudni, miert nem jo az a megoldas.
--


()=() Ki oda vagyik,
('Y') hol szall a galamb
C . C elszalasztja a
()_() kincset itt alant.

esetleg

(
IFS=:
PATH=/bin
unset TERMINFO
set -C
shift 5
COMMAND4
COMMAND5
exit 3 # Only exits the subshell!
) || exit $?
vagy
) || exit 3

"set -e"-vel nemmegy?

--
A vegtelen ciklus is vegeter egyszer, csak kelloen eros hardver kell hozza!

#( cd /adasda ) || echo 'marika'
-bash: cd: /adasda: No such file or directory
marika
#

--
.