Está verificando o status de saída diferente de 0 após um comando '|| return 'inacessível?

4

Encontrei o seguinte patch de código:

function some_fun() {    
#[...]
    [ -d ${MKAPP_BUILDDIR}/tmp ] || mkdir ${MKAPP_BUILDDIR}/tmp || return 1

    if [ $? -ne 0 ]; then   # never true?
            mount -t tmpfs none ${MKAPP_BUILDDIR}/tmp || return 1
    fi
}

Pelo que entendi, ele verifica se existe um diretório tmp no diretório de criação e, se não for o caso, tenta criá-lo. Se isso também falhar, sai das funções com o código de status 1.

Se for esse o caso, a verificação de um código de saída malsucedido na instrução if não seria inútil? Não pode haver um comando malsucedido antes, porque isso levaria a função retornando e a instrução if nunca sendo processada.

Estou correto em pensar isso ou a sintaxe está me enganando?

Estou usando bash, btw.

    
por Minix 21.10.2014 / 12:23

1 resposta

3

Sim, você está correto. O procedimento return sairá da função para o chamador originador no script com um status de saída igual a 1.

Portanto, o comando mount nunca será processado.

Para resolver isso, apenas tire a instrução if .. then do comando mount:

[ -d ${MKAPP_BUILDDIR}/tmp ] || mkdir ${MKAPP_BUILDDIR}/tmp || return 1

mount -t tmpfs none ${MKAPP_BUILDDIR}/tmp || return 1

Portanto, se o diretório não puder ser criado: saia com status de 1.
Se a criação for bem-sucedida, execute o comando mount .

    
por 21.10.2014 / 12:44