Отказ от ответственности: я не использую и не использовал MacOS, поэтому я не совсем уверен, что, если таковые имеются, могут существовать неровности или тонкие различия между Mac и * nix.
Чтобы ответить на ваш вопрос, единственный сценарий, который я мог представить себе как "сломанный" при такой настройке, - это когда определенная программа пытается что-то сделать с вашим домашним каталогом, и она либо не следует по символическим ссылкам по умолчанию (либо вообще не следует по некоторым причинам), Если какая-либо гипотетическая программа попытается прочитать / записать какой-либо файл в вашем домашнем каталоге, и она не разрешит вашу символьную ссылку /usr/local/home , скорее всего, все пойдет не так. Хотя вероятность такого сценария выше моей.
Тем не менее, я думаю, что вам лучше воспользоваться подходом, который не изменяет переменную $HOME . Изменение переменной $HOME на нечто, отличное от того, что система понимает под вашим домашним каталогом в течение срока службы каждой интерактивной оболочки, которую вы запускаете, является уродливым, хакерским и неизбежно вызывает тонкие проблемы. Я предоставлю вам три лучших варианта.
Вариант 1: более подходящая символическая ссылка
Если вы хотите использовать символическую ссылку, просто создайте символическую ссылку на /usr/local из вашего домашнего каталога, избавьтесь от имеющейся у вас ссылки /usr/local/home и удалите строку, изменяющую переменную $HOME из вашего .zshrc . Например:
% [~] ln -s /usr/local uloc
% [~] cd uloc
% [~/uloc] realpath .
/usr/local
Как и в настоящее время, вы можете быстро добраться до /usr /local из вашего домашнего каталога, за исключением того, что вам не нужно менять $HOME .
Вариант 2: Именованные каталоги
Поскольку вы используете Zsh, я бы порекомендовал использовать именованный каталог. Вместо HOME=/usr/local/home сделайте что-то вроде следующего, заменив uloc коротким именем по вашему выбору:
uloc=/usr/local
Затем вы можете быстро переключиться на этот каталог из любого места следующими способами:
# With no special options set
% cd ~uloc
# Slightly shorter
% setopt cdable_vars
% cd uloc
# Even shorter
% setopt cdable_vars auto_cd
% uloc
Как вы можете видеть, если у вас есть переменная , которая расширяется на пути, вы можете cd на него в Zsh , если префикс с ~ характер, подобно тому , как вы можете использовать ~user в качестве ярлыка для /home/user Вы можете иметь столько именованных каталогов, сколько захотите, так что вы можете иметь быстрый доступ к любому часто используемому каталогу, а не только к /usr/local как в вашем случае.
Опция cdable_vars позволяет опустить именованных ~ каталогов при использовании cd - диска, и auto_cd означает , что если ввести "команду", которая фактически является каталогом именем или буквальным Zsh будет автоматически cd в этот каталог. Комбинируя эти два, вы получаете быстрый доступ к нужному каталогу, где бы вы ни находились. В отличие от варианта 1, так как вы не полагаться на линке, cd ывая этого имени каталога будет на самом деле поставить вас в этот каталог, так что pwd будет возвращать /usr/local и /Users/njohn/uloc
Вариант 3: Использование CDPATH
Этот подход может использоваться сам по себе или в сочетании с вариантом 2.
Вы также можете использовать $CDPATH , которая является специальной переменной, такой как $PATH которая содержит список каталогов. В отличие от $PATH , каталоги в $CDPATH будут использоваться как "корень" для относительных путей, данных для cd если данный путь не найден в текущем каталоге. Для демонстрации рассмотрим следующее:
# Zsh ties lowercase variants of the *PATH variables together as arrays. See zshparam(1) for details
% [~/foo] cdpath=(/usr/local)
% [~/foo] ls
bar/ baz/
% [~/foo] cd share
% [/usr/local/share]
Поскольку в share не было каталога с именем ~/foo , Zsh обратился к $CDPATH чтобы узнать, где share может быть дочерним каталогом. Поскольку /usr/local был в $CDPATH , а share - это дочерний каталог /usr/local , вы можете использовать cd share из ~/foo . Вы также можете пойти глубже; например, если stuff был подкаталогом /usr/local/share , вы можете получить его, выполнив cd share/stuff .
Примечание: в отличие от Bash, Zsh всегда просматривает текущий каталог, прежде чем пытаться каталоги в $CDPATH , если только a . входит в $CDPATH . В этом случае Zsh строго соблюдает порядок каталогов в $CDPATH .
Это дает вам еще больше удобства, так как, как вы сказали, вам часто требуется доступ к вашим пакетам и конфигам homebrew, вы можете cd в один из этих подкаталогов из любой точки мира, не используя префикс!
Как уже упоминалось, вы можете комбинировать это с именованными каталогами. Чтобы взять пример из моих собственных файлов точек:
ZSH=~/.zsh
cdpath=(~/.zsh)
# I split my configuration up into separate files that live in separate
# directories, which all live under a 'modules' directory inside ~/.zsh
% [~] cd modules/directory
% [~ZSH/modules/directory] cd modules/git
% [~ZSH/modules/git]
Дальнейшее чтение
Я рекомендую познакомиться с Zsh и его многими функциями *. Вот некоторые справочные страницы и другие темы, которые вы можете посмотреть:
symlink(7) - Подробно описывает символические ссылки и то, как они взаимодействуют.
zshexpn(1), "Статические именованные каталоги" - Объясняет именованные каталоги, а остальная часть справочной страницы описывает все формы расширения в Zsh.
zshparam(1), «ПАРАМЕТРЫ, ИСПОЛЬЗУЕМЫЕ ОБОЛОЧКОЙ» - включает в себя описания специальных переменных, таких как cdpath и т.п.
zshoptions(1) - Подробно описывает все опции, которые управляют поведением Zsh через встроенный setopt . Содержит более подробные объяснения cdable_vars и auto_cd чем этот ответ.