Erro de valor de retorno nos scripts do bash

0

Eu tenho um script bash como este:

rm ~/sqoop/"$TABLE"/*
rmdir ~/sqoop/"$TABLE"
return $?

Após a execução deste script, ele retorna um valor para o próximo processo, mas mesmo que o script seja executado com sucesso e a execução de todos os estágios do script seja concluída com êxito, ele retornará 1.

Porque isso - o próximo processo não está ocorrendo.

Se eu remover a declaração de devolução, o próximo processo será executado sem problemas. este problema veio após a gradação do cluster do Hadoop, que tendo o Ubuntu 14 e o novo cluster, tem o Ubuntu 16.

Você pode nos ajudar a entender qual é o problema e como o próximo processo está sendo executado com êxito se remover o comando de retorno aqui e qual é o impacto na produção se remover a declaração de Devolução?

    
por gs rao 23.04.2018 / 09:48

1 resposta

2

A instrução return retornará um erro se a instrução não for executada a partir de uma função.

Nas funções do shell, use return . Em scripts, use exit .

Um script curto como

#!/bin/bash

return 0

produzirá a mensagem de erro

line 1: return: can only 'return' from a function or sourced script

e definirá $? para 1.

Se você não sair do script com um exit explícito (ou se sair com exit , mas sem especificar um código de saída), o código de retorno do script como um todo será igual ao último comando executado.

Ter exit "$?" é o mesmo que exit , e se estiver no final do script, isso pode ser deixado de fora completamente.

Em geral, sugiro também que você use $HOME em vez de til em scripts. Isso ocorre porque $HOME funciona como qualquer outra variável, enquanto o til é expandido em uma etapa de expansão separada, o que significa que ele não se comporta como uma variável e não é expandido em strings entre aspas. $HOME também é mais descritivo e, como é um script, você pode gastar alguns toques de tecla extras para tornar o código mais legível.

    
por 23.04.2018 / 10:29