O que é essa validação de instrução de script de shell específica?

1

Não sou um bom especialista em shell script. Alguém pode me ajudar a entender e explicar a declaração [ ! -z ${TRUE:-} ] && [ ${TRUE:-} == 'true' ] && do seguinte snippet. O que essa declaração específica está fazendo e / ou sendo validada?

No entanto, posso entender esta afirmação: TRUE=$($JBOSS_TWIDDLE get jboss.system:type=Server Started |grep Started |cut -d"=" -f2) . Isso basicamente chama a ferramenta de linha de comando JMOSS do JBoss para verificar o status inicial do servidor.

Snippet de código:

while [ $i -lt 180 ]; do
        TRUE=$($JBOSS_TWIDDLE get jboss.system:type=Server Started |grep  Started |cut -d"=" -f2)

        [ ! -z ${TRUE:-} ] && [ ${TRUE:-} == 'true' ] && {
    echo "The $JBOSS_NAME server is up and running."
    return
}
    
por Gnanam 22.04.2013 / 06:59

2 respostas

2

Como @drew-khoury e @ramruma apontam, o teste [ -z ... é supérfluo.

Usar TRUE como o nome de uma variável apenas aumenta a confusão.

A pergunta real que o snippet tenta responder é: did twiddle.sh print Started=true ? Ou, em shell, fale:

jboss_is_started() {
    ($JBOSS_TWIDDLE get jboss.system:type=Server Started |
        grep 'Started=true' | read)
}

A construção grep ... | read retornará true se o grep tiver êxito, enquanto descarta a saída.

if jboss_is_started; then
     echo "The $JBOSS_NAME server is up and running."
     return
fi
    
por 22.04.2013 / 08:40
2

As precauções elaboradas contra o $ TRUE estarem vazias não são necessárias se forem usadas aspas duplas.

[ "$TRUE" = 'true' ]

O -z testa se $ TRUE não está vazio e: - não substitui nada se não estiver definido. Tudo é desnecessário. Talvez seja um protesto contra um padrão de codificação excessivamente prescritivo.

    
por 22.04.2013 / 08:20