2

По крайней мере, в bash по умолчанию установлен параметр set +P , который заставляет определенные команды, такие как cd , pwd и tab-complete, следовать иерархии символьных ссылок, а не физической иерархии. Но многие другие команды, такие как 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"

Теперь введите следующую строку с табуляцией,
ls ../youre вкладка
и это будет завершено
../youreinthebasedir
но нажмите Enter, и вы получите ошибку, что файл не существует из-за вышеупомянутого расхождения.

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

0