Obtenha o caminho canônico para um comando

1

Estou escrevendo um script que precisa de um caminho canônico de certos comandos. Como pode haver links simbólicos apontando para os comandos reais, eu uso readlink -f para obter o caminho canônico. Mas não estou conseguindo o que realmente quero com readlink -f , explicarei com o seguinte exemplo:

Digamos que meu diretório atual seja: /home/user/Documents Se eu tentar obter um caminho de sleep com readlink -f , obtenho isto:

/home/user/Documents/sleep

O que eu realmente quero é /bin/sleep

    
por mythic 20.05.2016 / 13:53

1 resposta

1
readlink -f "$(type -P sleep)"

ou se você está preocupado com o desempenho:

cpath="$(type -P sleep)"; [ ! -L "$cpath" ] || cpath="$(readlink -f "$cpath")"

Usar readlink -e (existente) em vez de readlink -f pode poupar você desse tipo de acidente em que você opera em um arquivo não existente.

O segundo exemplo assume que o caminho retornado por type -P é canônico, o que significa que ele pressupõe que seu caminho não tenha componentes não canônicos.

    
por 20.05.2016 / 14:01