Как получить код возврата в TRAP ... RETURN? - PullRequest
1 голос
/ 09 мая 2019

Это мой код:

function my::return() {
    exit_code="$1" 
    echo "exit status of last command: ${exit_code}"
}

function testing(){
    trap 'my::return $?' RETURN
    return 2
}

Если я запускаю тестирование, я ожидаю, что код_выхода будет равен 2, поскольку это код в возврате, который ловушка ловит.

Ответы [ 2 ]

0 голосов
/ 09 мая 2019

Это лучшее, что я мог придумать

function my-func(){
  trap 'my::return $rc' RETURN
  local rc=2
  return $rc
}
0 голосов
/ 09 мая 2019

Предполагая, что вы заботитесь только о получении статуса выхода функции, а не об использовании ловушки, которую вы могли бы рассмотреть, используя функцию-обертку:

$ trace_function() {
  local result
  $@
  result=$?
  echo "$1 completed with status $result"
}

$ trace_function false
>false completed with status 1

$ trace_function true
>true completed with status 0

$ your_own_function() {
    if [ "$RANDOM" -gt "$1" ]; then
      echo ok
      return 0
    else
      echo ko
      return 1
    fi
}

$ trace_function your_own_function 16384
>ko
>your_own_function completed with status 1

$ trace_function your_own_function 16384
>ok
>your_own_function completed with status 0
...