Для печати текущего / текущего рабочего каталога доступны переменная окружения $PWD
и команда pwd
. Итак, в чем разница в использовании обоих? или что нужно выбрать для конкретной цели?
источник
Для печати текущего / текущего рабочего каталога доступны переменная окружения $PWD
и команда pwd
. Итак, в чем разница в использовании обоих? или что нужно выбрать для конкретной цели?
Это зависит от того, что вы делаете. Прежде всего, $PWD
это переменная окружения, pwd
встроенная оболочка или реальный двоичный файл:
$ type -a pwd
pwd is a shell builtin
pwd is /bin/pwd
Теперь встроенная команда bash просто напечатает текущее значение, $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
:Это будет означать выполнение,
pwd -P
когда в символических ссылках, которые указывают на некоторые другие каталоги, будет напечатан путь к исходному каталогу.Например, если у вас есть символическая ссылка,
/var/run
которая указывает на,/run
и вы находитесь в/var/run/
каталоге, выполнитевернусь:
и будет таким же
pwd
. Однако, если вы выполните:вернусь
Таким образом, это зависит от того, какой путь вам требуется: фактический путь без символических ссылок или текущий каталог, игнорирующий символические ссылки. Единственная разница между
pwd -P
иecho $PWD
когда есть символические ссылки.источник