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