Получить абсолютный путь к файлу OS X

Я создаю скрипт, который заставит пользователя ввести местоположение файла, и он преобразует его в абсолютный путь.

Это то, что у меня есть до сих пор. Я не уверен, как добавить их вместе.

absolute.sh

read -e -p "Enter a path to a file: " PATH CONVERTPATH="$(pwd $PATH)" "/" "$(basename $PATH)" echo Absolute path is $CONVERTPATH 

Надеюсь, вы, ребята, можете помочь. Заранее спасибо 🙂

Для добавления все, что вам нужно, это избавиться от дополнительных кавычек, например, изменить

 CONVERTPATH="$(pwd $PATH)" "/" "$(basename $PATH)" 

в

 CONVERTPATH="$(pwd $PATH)/$(basename $PATH)" 

Но есть несколько проблем:

  • pwd не принимает аргумента; вы можете использовать имя dirname в представленном случае.
  • команда read не будет устанавливать PATH ; переименуйте его, например, чтобы name
  • команда echo не полностью цитируется

С этими исправлениями у вас будет следующее:

 #!/bin/bash read -e -p "Enter a path to a file: " name CONVERTPATH="$(dirname $name)/$(basename $name)" echo "Absolute path is $CONVERTPATH" 

Он не обрабатывает случай, когда кто-то отвечает на приглашение переменной. Кроме того, предполагаемое использование pwd скорее всего, получит абсолютный каталог. Вы можете попробовать это путем дальнейшей замены

 #!/bin/bash read -e -p "Enter a path to a file: " name head=$(dirname "$name") head=$(cd "$head" && pwd) CONVERTPATH="$head/$(basename $name)" echo "Absolute path is $CONVERTPATH" 

Однако он все равно не будет делать то, что вы хотите . Проблема (с вашей точки зрения) заключается в том, что pwd на OSX просто выдает результат, основанный на следующей символической ссылке из команды cd . Это не просто причуда OSX, но и давнее поведение Unix, которое, например, позволило вам cd в каталог, в котором у вас не было прав, чтобы сделать правильный pwd , выполнив цепочку из записей.

Если вам нужен абсолютный путь, который не имеет каких-либо символических ссылок в его результате, вам нужен другой подход. OSX имеет realpath – но не в командной строке. В некоторых других системах вы можете использовать readlink -f , но не здесь.

Для общей дискуссии по этой теме:

  • Как получить абсолютное имя файла в сценарии оболочки в Mac OS X?
  • Абсолютный путь к скрипту Bash с OSX
  • Программный поиск абсолютного пути для приложения командной строки OS X
  • Как я могу получить поведение readlink -f GNU на Mac?