O Bash não está retornando $? variável corretamente

4

Bash não está retornando $? variável corretamente quando a saída do comando é atribuída a uma variável local:

test() {
  aaa=$(eval "timeout 1s sleep 5s")
  echo $? # echoes 124 (!=0 as expected)

  local aaa=$(eval "timeout 1s sleep 5s")
  echo $? # echoes 0
}

Por quê?

    
por ceremcem 17.06.2014 / 06:56

1 resposta

4

local é um comando por si só (é um shell embutido), então você está obtendo o valor de retorno de local , não o valor de retorno do pipeline na sua substituição de comando. Você pode considerar declarar a variável local antes da atribuição, o que evitará a necessidade de chamar o local construído durante o mesmo pipeline que a substituição do comando, o que evitará obscurecer o código de saída do seu comando:

foo() {
    local bar
    bar=$(baz)
    echo $?
}
    
por 17.06.2014 / 07:10

Tags