Condição para encontrar um arquivo

2

Estou tentando escrever um script que procure um arquivo e, se for encontrado, salve o caminho completo para uma variável. Versão atual:

if [[ -n FOUND_PATH=$(find "$PATH" -name "file.exe") ]]; then
    echo "Found, full path: "$FOUND_PATH
else
    echo "Not found."
fi

Avalia a expressão [[ -n ]] como verdadeira mesmo se nenhum arquivo for realmente encontrado e FOUND_PATH estiver realmente vazio. O que estou fazendo errado?

EDITAR:

Para ilustrar o problema que estou tendo atualmente, este código:

find "$PATH" -name "file.exe"

FOUND_PATH=$(find "$PATH" -name "file.exe")

if [[ -n "$(FOUND_PATH)" ]]; then
    echo "Found, full path: "$FOUND_PATH
else
    echo "Not found."
fi

Retorna apenas Found, full path: , então a primeira linha não produz nada, mas ao verificar mais tarde por ser uma string não vazia na terceira linha, ela é avaliada como não vazia!

    
por andrey g 16.07.2015 / 21:07

1 resposta

3

A atribuição não dá algum resultado no bash como seria em, e. C. Você tem que fazer:

FOUND_PATH=$(find "$PATH" -name "file.exe")
if [[ -n "$FOUND_PATH" ]]; then
    echo "Found, full path: $FOUND_PATH"
else
    echo "Not found."
fi

e certifique-se de que seu $ FOUND_PATH esteja entre aspas duplas, no parâmetro para o primeiro echo também.

Se o seu $ PATH não é um único diretório, mas por exemplo /usr/bin:/bin você pode querer mudar a primeira linha para:

FOUND_PATH=$(find $(echo "$PATH" | sed "s/:/ /g" ) -name "file.exe")
    
por 16.07.2015 / 21:14