Cóż, pytanie nie jest bardzo jasne Re: co jego autor chciał po przechwytywanie błędów w pochodzących skryptu, jednak jako punkt wejścia do roztworu dodaje się będzie wystarczyć:
można ustawić pułapki na ERR i obsługiwać błąd wewnątrz skryptu źródłowego tam. Poniżej znajdują się dwa scenariusze: jeden ze skryptem źródłowym za pomocą "set -e", a drugi ze skryptem źródłowym NIE używającym "set -e".
Podstawowym skrypt jest wywołaniem wtórnego skrypt z określonymi „set -e” i łapie błąd:
[galaxy => ~]$ cat primary.sh
#!/bin/sh
set -e
echo 'Primary script'
trap 'echo "Got an error from the secondary script"' ERR
source secondary.sh
trap - ERR
echo 'Primary script exiting'
[galaxy => ~]$ cat secondary.sh
#!/bin/sh
echo 'Secondary script'
set -e
echo 'Secondary script generating an error'
false
echo 'Secondary script - should not be reached'
[galaxy => ~]$ ./primary.sh
Primary script
Secondary script
Secondary script generating an error
Got an error from the secondary script
[galaxy => ~]$
Podstawowym skrypt jest wywołanie skryptu wtórny bez „set -e” i połowów błąd:
[galaxy => ~]$ cat primary.sh
#!/bin/sh
set -e
echo 'Primary script'
trap 'echo "Got an error from the secondary script"' ERR
source secondary.sh
trap - ERR
echo 'Primary script exiting'
[galaxy => ~]$ cat secondary.sh
#!/bin/sh
echo 'Secondary script'
echo 'Secondary script generating an error'
false
echo 'Secondary script - should not be reached if sourced by primary.sh'
[galaxy => ~]$ ./primary.sh
Primary script
Secondary script
Secondary script generating an error
Got an error from the secondary script
[galaxy => ~]$
Jako bonus: przechwytywanie błąd w skrypcie i pochodzących kontynuując:
[galaxy => ~]$ cat primary.sh
#!/bin/sh
echo 'Primary script'
i=0
while [ $i = 0 ]; do
i=1
trap 'echo "Got an error from the secondary script"; break' ERR
source secondary.sh
done
trap - ERR
echo 'Primary script exiting'
[galaxy => ~]$ cat secondary.sh
#!/bin/sh
echo 'Secondary script'
echo 'Secondary script generating an error'
false
echo 'Secondary script - should not be reached if sourced by primary.sh'
[galaxy => ~]$ ./primary.sh
Primary script
Secondary script
Secondary script generating an error
Got an error from the secondary script
Primary script exiting
[galaxy => ~]$
@BlueMoon PO post wyjaśnia, dlaczego to nie zadziała. –
Nie można ustawić pułapki wyjścia w środowisku wywołującym i obsługiwać go tam? –