Bash Logic para trás em um sistema, mas não em outro

4

Eu tenho dois sistemas linux. Estou testando a existência de um programa em cada sistema. Um sistema tem o programa instalado, outro não. De alguma forma, cada sistema avalia o seguinte exemplo da mesma maneira, apesar do comando em $() retornar diferentes valores em cada sistema (0 no sistema com nvim instalado, 1 no sistema sem nvim instalado, conforme esperado). Exemplo:

if [[ $(type nvim &>/dev/null) ]]; then
    echo true;
else
    echo false;
fi

ecoa false em ambos os sistemas.
Por que isso pode ser e como posso consertar isso?

    
por dfryer1193 05.10.2015 / 22:06

2 respostas

8

Tente:

if type nvim &>/dev/null
then
     echo true
else
     echo false
fi

Uma instrução if command; then... depende do command que retorna um código de saída. O comando [[...]] pode definir códigos de saída com base em várias condições, como igualdade de cadeia, existência de um arquivo, etc. Consulte man bash para obter detalhes. Você não precisa de nenhuma dessas condições aqui e type retorna um código de saída útil sozinho.

    
por 05.10.2015 / 22:12
2

Você está fazendo errado. O seguinte:

if [[ $(type nvim &>/dev/null) ]]; then

é equivalente a isto:

if [[ "" ]]; then

Você pode fazer o que quiser, como disse na outra resposta ou ser mais explícito sem motivo e use $? :

type nvim &>/dev/null

if [[ $? -eq 0 ]]; then
    echo true;
else
    echo false;
fi
    
por 05.10.2015 / 22:19

Tags