Я создал программную ссылку ( ln -s 1 2
) на каталог, который находится внутри test
каталога, открыл программную ссылку ( cd 2
) и отобразил текущий путь, используя pwd
. Отображаемый путь был ~/test/2
и нет ~/test/1
.
В ОС, такой как Windows, все по-другому, ярлык приводит нас к реальному каталогу. Я немного запутался, как эта мягкая ссылка работает в Linux. Разве это не ярлык, как в Windows
? Почему нет пути ~/test/1
?
$ mkdir test
$ cd test
$ mkdir 1
$ ln -s 1 2
$ cd 2
$ pwd
/home/dazz/test/2
shell
symlink
cd-command
DScript
источник
источник
Ответы:
Это особенность оболочки, которая помнит, как вы попали туда, где вы находитесь.
Если вы
realpath
установили, вы можете сделать:И не хватает этого, если у вас есть Python:
или читайте ссылку (из coreutils):
или
/bin/pwd
(не встроенная оболочкаpwd
):источник
ls -l /proc/$$/cwd
использует/proc
интерфейс файловой системы ядра .pwd -P
чтобы напечатать физический, а не логический путь к текущему каталогу.Контраст
pwd
а/bin/pwd
.pwd
, которая является встроенной командой во многих оболочках, говорит вам, где ваша оболочка думает, что вы находитесь (и, следовательно, обрабатывает символические ссылки как «мягкие ссылки», как если бы они были настоящими каталогами./bin/pwd
это внешняя программа, которая сообщает вам, где вы на самом деле, при необходимости обходя дерево файловой системы/
. Он не учитывает символические ссылки, потому что они не существуют при прохождении вверх через..
источник
Другие ответы касались
/bin/pwd
оболочкиbuiltin pwd
.Если вы хотите следовать символическим ссылкам в упомянутом вами стиле Windows, используйте
cd -P
: это изменит переменную PWD соответственно.Если вы хотите использовать
-P
по умолчанию, вы можете добавить эту строку в ваш.bashrc
или.zshrc
:Другие оболочки могут отличаться.
источник