Абсолютный путь скрипта Bash с OS X - PullRequest
76 голосов
/ 26 августа 2010

Я пытаюсь получить абсолютный путь к текущему запущенному сценарию на OS X.

Я видел много ответов, идущих за readlink -f $0.Однако, поскольку readlink в OS X совпадает с BSD, он просто не работает (работает с версией GNU).

Существует ли готовое решение для этого?

Ответы [ 11 ]

0 голосов
/ 07 января 2019

Основываясь на связи с комментатором, я согласился, что это очень сложно и не имеет тривиального способа реализовать realpath, который ведет себя точно так же, как Ubuntu. Но следующая версия, может обрабатывать угловые случаи, лучший ответ не может и удовлетворить мои ежедневные потребности в MacBook. Поместите этот код в ваш ~ / .bashrc и запомните:

  • arg может быть только 1 файлом или директорией, без подстановочных знаков
  • без пробелов в директории или имени файла
  • по крайней мере, файл или родительский каталог dir существует
  • не стесняйтесь использовать. .. / вещь, это безопасно

    # 1. if is a dir, try cd and pwd
    # 2. if is a file, try cd its parent and concat dir+file
    realpath() {
     [ "$1" = "" ] && return 1

     dir=`dirname "$1"`
     file=`basename "$1"`

     last=`pwd`

     [ -d "$dir" ] && cd $dir || return 1
     if [ -d "$file" ];
     then
       # case 1
       cd $file && pwd || return 1
     else
       # case 2
       echo `pwd`/$file | sed 's/\/\//\//g'
     fi

     cd $last
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...