Obtenha o caminho canônico para um comando

Obtenha o caminho canônico para um comando

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 -fpara 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 sleepcom, readlink -frecebo 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 -fpode 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.

informação relacionada