pwd без символьних посилань


54

Якщо я це pwdзауважую, він використовує будь-які посилання, якими я користувався, щоб потрапити в поточний каталог. Чи можу я дозволити мені сказати мені "справжній" каталог, в якому я перебуваю ... тобто шлях від кореня до мого поточного каталогу без використання жодних посилань?

Відповіді:


70

Відповідно до сторінки POSIX для pwdцієї -Pопції може бути корисно:

-П Написане абсолютне ім'я шляху не повинно містити імена файлів, які в контексті імені шляху посилаються на файли символьного посилання типу.

Таким чином

$ pwd -P

має бути тим, що вам потрібно.


Я хотів би зазначити, що цю інформацію легко знайти, ввівши man pwdоболонку, щоб дізнатись параметри цієї команди.
Чуд37

7

Вбудована оболонка pwd використовує шлях, за яким оболонка відстежує, коли ви cd(і зберігає її $PWD). Це означає, що якщо у вас є посилання на складний (глибокий) шлях, він підкаже, що ви ввели, щоб змінити до цього каталогу замість реального шляху. Це робиться для того, щоб дати вам те, чого ви хочете більшу частину часу.

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

Як зазначив Стівен Д, pwdє -Pможливість ігнорувати $PWD. Він також має -Lможливість повернути вміст $PWD. Сторінка man для pwdне каже, який варіант використовується за замовчуванням, але досвід підказує, що вищеописаний опис є правильним (оболонка pwdпроти /bin/pwd). Однак ви, мабуть, не повинні покладатися на це, а просто користуватися pwd -P.


2
Поведінка, яку ви описуєте, є такою в системах Linux, де /bin/pwdGNU, pwdколи POSIXLY_CORRECT не встановлено. У системах POSIX, де pwdзнаходиться /bin. /bin/pwdбуде використовувати $ PWD і може повертати контури з посиланнями. GNU pwd буде вести себе таким чином POSIX, коли знаходить змінну POSIXLY_CORRECT у своєму оточенні.
Стефан Шазелас
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.