Как получить полный путь из «../» в командной строке в сценарии оболочки Linux

17

Если у меня есть сценарий оболочки, в котором я получаю родительскую папку, используя "../", могу ли я как-то развернуть ее в абсолютный путь?

    
задан Rob Segal 24.10.2011 в 17:08
источник
  • насколько я помню «pwd» дает вам родительский рабочий каталог –  weberik 24.10.2011 в 17:11
  • @weberik: «печатать рабочий каталог» –  Ignacio Vazquez-Abrams 24.10.2011 в 17:12
  • о, хорошо, запомнили неправильно, THX для подсказки :) –  weberik 24.10.2011 в 17:13
  • идея: попробуйте stackoverflow вместо google :-) –  Gyom 24.10.2011 в 17:15

4 ответа

25

Вы хотите readlink -f .

$ cd /tmp
$ readlink -f ..
/
    
ответ дан Ignacio Vazquez-Abrams 24.10.2011 в 17:10
  • Это лучший ответ для Linux. Но если кому-то интересно, readlink -f не поддерживается в OS X. Затем вы можете использовать cd "$ (dirname" $ {BASH_SOURCE [0]} ")" && pwd -P –  jwfearn 08.10.2014 в 02:30
4

Использовать realpath

$ realpath ..
/home
    
ответ дан Андрей Татаринов 24.10.2011 в 17:12
  • Эта команда не поставляется с дистрибутивами Linux по умолчанию –  zoltanctoth 25.04.2013 в 16:56
1

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

Чтобы обойти это ограничение без фактического изменения текущего рабочего каталога, я считаю правильным просто запустить этот cd в вложенной оболочке , например:

THIS='dirname $0'     # Which is often "."
PARENT=$(
  cd $THIS            # At this point, we are sure we're in script's directory
  dirname 'pwd -P'
)
echo "PARENT=$PARENT"
    
ответ дан Howard Abrams 24.03.2014 в 22:07
0

При использовании в строке cmd:

dirname $(pwd)

При использовании в сценарии оболочки:

PROJ_DIR=$(dirname $(pwd))
    
ответ дан Alex.Li 02.01.2017 в 04:03