По крайней мере, в Баше, по умолчанию параметр set +Pустановлен, который делает определенные команды, как cd, pwdи закладки завершения следовать символической иерархии ссылок, а не физическая иерархии. Но многие другие команды lsпросто следуют физической иерархии.
Вы можете сделать так, set -Pчтобы все команды следовали физической структуре каталогов (или добавляли ее в свой ~/.inputrcфайл для обеспечения постоянства между сеансами). Но что, если я хочу пойти другим путем, чтобы все (большинство?) Команд подчинялись символической структуре каталогов? Можно ли это сделать? Это специфично для bash? В качестве альтернативы, есть ли способ заставить вещи поверить, что символический каталог является физическим? И чтобы быть ясным, я ищу настройки, которые влияют на поведение всех потенциальных функций, а не как обходной путь readlink. Самое близкое, что я могу найти - это обходной путь .
Для примера того, как можно получить неприятные результаты, продолжайте читать. Это может привести к сбивающему с толку поведению, так как вы можете завершить табуляцию в файле / папке, которую команда, которую вы запускаете, не сможет найти. Например (возможно, вам придется сделать set +Pсначала):
mkdir symtest1 mkdir symtest1/subdir ln -s symtest1/subdir touch youreinthebasedir #a lovely file to show where you're looking touch symtest1/youreinsymtest1 #yet another pwd #shows where you are cd subdir pwd #should show the same plus "/subdir" ls ../ #should show the contents of "symtest1" Теперь введите следующую команду с помощью tab-
ls ../youretab
complete, и она завершится,
../youreinthebasedir
но нажмите Enter, и вы получите ошибку, что файл не существует из-за вышеупомянутого расхождения.
Примечание: POSIX определяет * родительский каталог * как
каталог, который содержит запись каталога для данного каталога и представлен по пути точка-точка в данном каталоге. Также здесь:Точка специального имени файла должна ссылаться на родительский каталог своего каталога предшественника. Символьная ссылка не является «записью каталога для данного каталога», поэтому ваша оболочка интерпретирует..против POSIX;lsделает это" правильно ".