Ваша оболочка отслеживает символические ссылки, которые привели вас к вашему текущему рабочему каталогу. cd
является встроенной оболочкой и help cd
состояниям (пример из bash
):
Опции:
-L
принудительно использовать символические ссылки: разрешать символические ссылки в DIR после обработки экземпляров ..
-P
использовать структуру физического каталога без следующих символических ссылок: разрешать символические ссылки в DIR перед обработкой экземпляров ..
[...]
По умолчанию следует переходить по символическим ссылкам, как если бы был указан -L
.
Вы можете попробовать cd -P ..
и увидеть разницу. Другой пример - pwd -L
и pwd -P
(в то время как pwd
также является встроенной оболочкой).
Обратите внимание, что поведение по умолчанию можно изменить с помощью set -P
и set +P
См. help set
для более подробной информации.
С другой стороны, ls
- это отдельный исполняемый файл, который не использует возможности отслеживания вашей оболочки. Однако вы можете заставить его следовать символическим ссылкам с помощью этого трюка:
(cd -L .. && ls -l)
В основном мы используем cd
для изменения текущего рабочего каталога относительно символьных ссылок (и я явно использовал для этого опцию -L
по умолчанию), затем вызываем ls -l
. Оператор &&
означает, что ls
будет выполняться только в случае успеха cd
. Скобки ()
заставляют все, что внутри, выполняться в подоболочке. Это команда trick: cd
влияет только на эту подоболочку, и в вашей основной оболочке ничего не меняется, нет необходимости возвращать cd
.