Como verificar se o destino de um link simbólico aponta para um determinado caminho

12

Dentro de um script bash, sei que posso verificar se um arquivo é um link simbólico com a seguinte sintaxe

if [ -L $path ]

Alguém sabe como eu testaria se esse caminho estava vinculado a um caminho específico? Por exemplo. Quero verificar se o destino de $path é /some/where .

    
por BillMan 24.03.2015 / 21:50

1 resposta

16

Se você quiser verificar se $path é um link simbólico cujo destino é /some/where , é possível usar o utilitário readlink . Não é POSIX, mas está disponível em muitos sistemas (GNU / Linux, BusyBox, * BSD,…).

if [ "$(readlink -- "$path")" = /some/where ]; then …

Note que esta é uma comparação exata de texto. Se o destino do link for /some//where , ou se for where e o valor de $path for /some/link , os textos não corresponderão.

Muitas versões de readlink suportam a opção -f , que canoniza o caminho expandindo todos os links simbólicos.

Muitos shells, incluindo dash, ksh, bash e zsh, suportam o operador -ef no test builtin para testar se dois arquivos são iguais (links físicos para o mesmo arquivo, após seguir os links simbólicos). Esse recurso também é amplamente suportado, mas não é POSIX.

if [ "$path" -ef "/some/where" ]; then …
    
por 25.03.2015 / 02:34