Сделайте так, чтобы все команды подчинялись иерархии символьных ссылок

362
TTT

По крайней мере, в Баше, по умолчанию параметр 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, и вы получите ошибку, что файл не существует из-за вышеупомянутого расхождения.

Более полезное обсуждение можно найти здесь и здесь .

2
Примечание: POSIX определяет [* родительский каталог *] (http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap03.html#tag_03_268) как `каталог, который содержит запись каталога для данного каталога и представлен по пути точка-точка в данном каталоге`. Также [здесь] (http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap04.html#tag_04_13): `Точка специального имени файла должна ссылаться на родительский каталог своего каталога предшественника`. Символьная ссылка не является «записью каталога для данного каталога», поэтому ваша оболочка интерпретирует `..` против POSIX; `ls` делает это" правильно ". Kamil Maciorowski 5 лет назад 1
О, приведенный выше комментарий не предназначен для дискредитации вопроса. Ваш вопрос в порядке, я проголосовал за него. Я просто даю некоторый контекст и обоснование. Kamil Maciorowski 5 лет назад 2
«В качестве альтернативы, есть ли способ заставить вещи поверить, что символический каталог является физическим?» - Вы можете найти это интересным: [Что такое привязка?] (Https://unix.stackexchange.com/q/198590/108618) Kamil Maciorowski 5 лет назад 1

0 ответов на вопрос

Похожие вопросы