Разница в использовании между pwd и $ PWD

Для печати текущей / существующей рабочей директории доступны переменные среды , $PWD и , команды , pwd. Итак, в чем разница в использовании обоих? или Что следует выбрать для конкретной цели?

9
задан 4 June 2014 в 10:45

2 ответа

Это зависит от того, что Вы делаете. В первую очередь, $PWD переменная среды и pwd встроенная оболочка или фактический двоичный файл:

$ type -a pwd
pwd is a shell builtin
pwd is /bin/pwd

Теперь, встроенный удар просто распечатает текущее значение $PWD если Вы не используете -P флаг. Как объяснено в help pwd:

pwd: pwd [-LP]
Print the name of the current working directory.

Options:
  -L    print the value of $PWD if it names the current working
    directory
  -P    print the physical directory, without any symbolic links

By default, `pwd' behaves as if `-L' were specified.

pwd двоичный файл, с другой стороны, передает текущий каталог getcwd(3) системный вызов, который возвращает то же значение как readlink -f /proc/self/cwd. Для иллюстрирования попытайтесь переместиться в каталог, который является ссылкой на другой:

$ ls -l
total 4
drwxr-xr-x 2 terdon terdon 4096 Jun  4 11:22 foo
lrwxrwxrwx 1 terdon terdon    4 Jun  4 11:22 linktofoo -> foo/
$ cd linktofoo
$ echo $PWD
/home/terdon/foo/linktofoo
$ pwd
/home/terdon/foo/linktofoo
$ /bin/pwd
/home/terdon/foo/foo

Так, в заключение в системах GNU (таких как Ubuntu), pwd и echo $PWD эквивалентны, если Вы не используете -P опция, но /bin/pwd отличается и ведет себя как pwd -P.

10
ответ дан 4 June 2014 в 10:45

Оба возвратят тот же результат, если Вы будете использовать их без опций для всех рабочих каталогов, включая когда в символьных ссылках.

Однако от man pwd:

-P, --physical
    avoid all symlinks

Это означало бы выполняться pwd -P когда в символьных ссылках, которые указывают на некоторые другие каталоги, распечатает путь к исходному каталогу.

Как пример, если у Вас есть символьная ссылка /var/run это указывает на /run и Вы в настоящее время находитесь в /var/run/ каталог, выполняясь

echo $PWD

возвратится:

/var/run

и будет то же для pwd. Однако, если Вы выполняетесь:

pwd -P

возвратится

/run

Таким образом это зависит, какого пути Вы требуете: фактический путь без символьных ссылок или существующего каталога, игнорирующего символьные ссылки. Единственная разница между между pwd -P и echo $PWD когда существуют символьные ссылки.

3
ответ дан 4 June 2014 в 10:45

Другие вопросы по тегам:

Похожие вопросы: