Для печати текущей / существующей рабочей директории доступны переменные среды , $PWD
и , команды , pwd
. Итак, в чем разница в использовании обоих? или Что следует выбрать для конкретной цели?
Это зависит от того, что Вы делаете. В первую очередь, $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
.
Оба возвратят тот же результат, если Вы будете использовать их без опций для всех рабочих каталогов, включая когда в символьных ссылках.
Однако от 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
когда существуют символьные ссылки.