Bash maneira confiável de testar arquivo existe

1

Eu descobri recentemente que bash test -e não funciona com um link simbólico circular.

ln -s ./test ./test
if [[ -e ./test ]]; then echo "exists"; fi
#this won't echo.

então eu preciso usar -L then -e para fazer isso

if [[ -L ./test || -e ./test ]]; then echo "exists"; fi

Embora isso corrija meu problema, comecei a me perguntar se há outros casos de canto que -e não cobre.

Que outros casos de canto existem? Existe uma maneira fácil e portátil de detectar um arquivo com segurança?

    
por xbtsw 06.03.2017 / 03:57

1 resposta

1

O problema não é com o link circular, é o link simbólico apontando para um arquivo que não existe. A mesma coisa acontecerá sempre que você apontar um link simbólico para qualquer arquivo que não exista.

Na página test man:

If file is a symbolic link, test will fully dereference it and then evaluate the expression against the file referenced, except for the -h and -L primaries.

Este é o único caso limite para test mencionado em sua página man.

    
por 06.03.2017 / 22:50