2015-04-22 3 views
4

Возможно ли выполнить файл, символически связанный в/usr/local/bin, чтобы получить абсолютный путь к исходному скрипту? Ну, я знаю, где оригинальный файл, и я знаю это, потому что я его связываю. Но ... Я хочу, чтобы этот скрипт работал, даже если я перемещаю исходный код (и символическую ссылку).Bash: как получить реальный путь символической ссылки?

#!/bin/bash 
echo "my path is ..." 
+0

'readlink',' ls -l' – PSkocik

+0

readlink - это функция, которую я могу вызвать в сценарии bash? Я пытаюсь, но не работает = ( – sensorario

+0

readlink - это двоичный код, который является частью coreutils – PSkocik

ответ

13

readlink не является стандартной командой, но это часто встречается на Linux и BSD, включая OS X, и это самый простой ответ на ваш вопрос. Реализации BSD и GNU readlink различны, поэтому читайте документацию по той, которая у вас есть.

readlink Если нет, или вам нужно написать скрипт кросс-платформенной, не привязанных к конкретной реализации:

Если символическая также каталог, то

cd -P "$symlinkdir" 

приведет вас в каталог разблокировки, поэтому

echo "I am in $(cd -P "$symlinkdir" && pwd)" 

будет эхо полностью разыменованным каталогом. Тем не менее, cd -P разделяет весь путь, поэтому, если у вас есть более одной символической ссылки по тому же пути, вы можете получить неожиданные результаты.

Если символическая ссылка относится к файлу, а не к каталогу, вам может не потребоваться разыменовать ссылку. Большинство команд без символических ссылок. Если вы просто хотите проверить, является ли файл ссылкой, используйте test -L.

+0

Сценарий« #!/bin/bash », выполняя команду: echo "Я в $ (cd -P" $ symlinkdir "&& pwd)", print "/ usr/local/bin/ttmux: строка 4: cd:: Нет такого файла или каталога" – sensorario

+3

'pwd' также имеет' -P'.Если вы уже находитесь в каталоге, который вы можете сделать: 'pwd -P'. Также, если вы не находитесь:' (cd/path/w/symlinks/&& pwd -P) ' – Boop

Смежные вопросы