Estou tentando verificar se existe um link simbólico no bash. Aqui está o que eu tentei.
mda=/usr/mda
if [ ! -L $mda ]; then
echo "=> File doesn't exist"
fi
mda='/usr/mda'
if [ ! -L $mda ]; then
echo "=> File doesn't exist"
fi
No entanto, isso não funciona. E se '!' é deixado de fora, nunca é acionado. E se '!' está lá, ele dispara toda vez.
Respostas:
-L
retorna true se o "arquivo" existe e é um link simbólico (o arquivo vinculado pode ou não existir). Você deseja-f
(retorna true se o arquivo existe e é um arquivo regular) ou talvez apenas-e
(retorna true se o arquivo existe independentemente do tipo).De acordo com a página de manual do GNU ,
-h
é idêntico-L
, mas de acordo com a página de manual do BSD , não deve ser usado:fonte
!
é, por exemplo,if ! [ -L $mda ]; then .... fi
colocar o ponto de exclamação fora dos colchetes.if [ ! -L "$mda" ]; then ... fi
(nota:if [ ! ... ]
eif ! [ ... ]
são idênticos :)-L
e-h
são iguais .man test
também confirma isso.-L é o teste para o arquivo existente e também é um link simbólico
Se você não deseja testar se o arquivo é um link simbólico, mas apenas teste para ver se ele existe, independentemente do tipo (arquivo, diretório, soquete etc.) e use -e
Portanto, se o arquivo for realmente um arquivo e não apenas um link simbólico, você poderá executar todos esses testes e obter um status de saída cujo valor indique a condição de erro.
fonte
-e "${file}"
falha se o link simbólico existe, mas seu destino não existe.Você pode verificar a existência de um link simbólico e se ele não está quebrado com:
Portanto, a solução completa é:
fonte
Talvez seja isso que você está procurando. Para verificar se existe um arquivo e não é um link.
Tente este comando:
fonte
Que tal usar
readlink
?fonte
O arquivo é realmente um link simbólico? Caso contrário, o teste usual de existência é
-r
ou-e
.Veja
man test
.fonte
Se você está testando a existência do arquivo, deseja -e não -L. -L testa um link simbólico.
fonte
primeiro você pode fazer com este estilo:
se você quiser fazê-lo em um estilo mais avançado, você pode escrever como abaixo:
o resultado acima é como:
fonte