Você pode envolver sua função em um subshell, tornando o set -o xtrace
afetado apenas no subshell:
run() (
if [ -n "$WERCKER_MAVEN_DEBUG" ]; then
set -o xtrace
case "$WERCKER_MAVEN_DEBUG" in
[1-2]) env;;
[1-3]) DEBUG="--debug";;
esac
fi
if [ -e "$WERCKER_MAVEN_SETTINGS" ]; then
SETTINGS="--settings=${WERCKER_MAVEN_SETTINGS}"
fi
mvn --update-snapshots \
--batch-mode \
-Dmaven.repo.local=${WERCKER_CACHE_DIR} \
${SETTINGS} ${DEBUG} \
${WERCKER_MAVEN_GOALS}
)
run
printf '%s\n' "$?"
Teste simples:
$ cat test.sh
#!/bin/sh
run() (
set -o xtrace
return 1
)
run
printf '%s\n' "$?"
Execute:
$ ./test.sh
+ return 1
1