Obtener la ruta canónica para un comando

Obtener la ruta canónica para un comando

Estoy escribiendo un script que necesita una ruta canónica para ciertos comandos. Dado que podría haber enlaces simbólicos que apunten a los comandos reales, utilizo readlink -fpara obtener la ruta canónica. Pero no obtengo lo que realmente quiero readlink -f, lo explicaré con el siguiente ejemplo:

Digamos que mi directorio actual es: /home/user/Documents Si intento obtener una ruta sleepcon, readlink -fobtengo esto:

/home/user/Documents/sleep

Lo que realmente quiero es/bin/sleep

Respuesta1

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

o si eres consciente del rendimiento:

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

Usar readlink -e(existente) en lugar de readlink -fpuede salvarlo de este tipo de accidente en el que opera con un archivo inexistente.

El segundo ejemplo supone que la ruta devuelta por type -Pes canónica, lo que significa que asume que su ruta no tiene componentes no canónicos.

información relacionada