Получить канонический путь для команды

Получить канонический путь для команды

Я пишу скрипт, которому нужен канонический путь определенных команд. Поскольку могут быть символические ссылки, указывающие на реальные команды, я использую readlink -fдля получения канонического пути. Но я не получаю того, что я на самом деле хочу с помощью readlink -f, я объясню на следующем примере:

Допустим, мой текущий каталог: /home/user/Documents Если я попытаюсь получить путь к sleepнему readlink -f, то получу следующее:

/home/user/Documents/sleep

Чего я на самом деле хочу, так это/bin/sleep

решение1

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

или если вы заботитесь о производительности:

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

Использование readlink -e(существующего) вместо readlink -fможет уберечь вас от подобных ситуаций, когда вы работаете с несуществующим файлом.

Во втором примере предполагается, что возвращаемый путь type -Pявляется каноническим, то есть предполагается, что ваш путь не содержит неканонических компонентов.

Связанный контент