Estou escrevendo um script que precisa do caminho canônico de determinados 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 o readlink -f
, vou explicar com o seguinte exemplo:
Digamos que meu diretório atual seja: /home/user/Documents
Se eu tentar obter um caminho sleep
com, readlink -f
recebo isto:
/home/user/Documents/sleep
O que eu realmente quero é/bin/sleep
Responder1
readlink -f "$(type -P sleep)"
ou se você estiver preocupado com o desempenho:
cpath="$(type -P sleep)"; [ ! -L "$cpath" ] || cpath="$(readlink -f "$cpath")"
Usar readlink -e
(existente) em vez de readlink -f
pode salvá-lo desse tipo de acidente em que você opera em um arquivo inexistente.
O segundo exemplo assume que o caminho retornado por type -P
é canônico, o que significa que assume que seu caminho não possui componentes não canônicos.