pwd без символических ссылок

54

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

JoelFan
источник

Ответы:

70

В соответствии с man-страницей POSIX pwd, -Pопция может быть полезной:

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

таким образом

$ pwd -P

должно быть то, что вам нужно.

Стивен Д
источник
Я хотел бы отметить, что эту информацию легко найти, набрав man pwdв командной строке, чтобы узнать параметры этой команды.
Chud37
7

Встроенная оболочка pwd использует путь, который оболочка отслеживает, когда вы cd(и сохраняет его $PWD). Это означает, что если у вас есть символическая ссылка на сложный (глубокий) путь, он скажет вам, что вы ввели, чтобы изменить этот каталог вместо реального пути. Это сделано, чтобы дать вам то, что вы хотите большую часть времени.

/bin/pwdиспользует getcwdсистемный вызов (который в наши дни является библиотечным вызовом, чтение /proc/self/cwd), который возвращает канонический путь к текущему каталогу, без всех обходов символической ссылки.

Как указал Стивен Д., pwdимеет -Pвозможность игнорировать $PWD. Он также имеет -Lвозможность вернуть содержимое $PWD. Страница pwdруководства для не говорит, какая опция используется по умолчанию, но опыт подсказывает, что приведенное выше описание является правильным (оболочка pwdпротив /bin/pwd). Однако вы, вероятно, не должны полагаться на это и просто использовать pwd -P.

CAMH
источник
2
Поведение, которое вы описываете, такое же, как в системах Linux, где /bin/pwdGNU, pwdкогда POSIXLY_CORRECT не установлен. В системах POSIX, где pwdнаходится /bin. /bin/pwdбудет использовать $ PWD и может возвращать пути с символическими ссылками. GNU pwd будет вести себя так же, как POSIX, когда найдет переменную POSIXLY_CORRECT в своей среде.
Стефан Шазелас