Próbuję utworzyć funkcję w skrypcie powłoki, która pobiera komendę i wykonuje ją za pomocą eval, a następnie wykonuje pewne przetwarzanie końcowe w oparciu o powodzenie komendy. Niestety kod nie zachowuje się tak, jak bym się spodziewał. Oto co mam:Uzyskaj kod wyjścia dla polecenia eval w sh
#!/bin/sh
...
function run_cmd()
{
# $1 = build cmd
typeset cmd="$1"
typeset ret_code
eval $cmd
ret_code=$?
if [ $ret_code == 0 ]
then
# Process Success
else
# Process Failure
fi
}
run_cmd "xcodebuild -target \"blah\" -configuration Debug"
Gdy komenda ($cmd
) się powiedzie, to działa dobrze. Jeśli polecenie nie powiedzie się (na przykład błąd kompilacji), skrypt zostanie automatycznie zamknięty, zanim będę mógł przetworzyć błąd. Czy istnieje sposób, w jaki mogę zapobiec evalowi z wychodzenia z domu, czy też istnieje inne podejście, które mogę podjąć, aby osiągnąć pożądane zachowanie?
nie powinno być automatycznego wyjścia, chyba że w twoim skrypcie znajduje się 'set -e'. Jeśli go masz, 'set + e' wyłączy to. –
* westchnienie * Miałem 'set -o errexit' utrzymujące się na górze skryptu wywołującego. Dziękuję za wskazanie tego. – Jeff