Оболочка, которую я обычно использую, есть zsh
. У меня есть несколько псевдонимов для включения цвета в некоторых программах, таких как ls
и grep
. Я также установил свой собственный путь, чтобы я мог выполнять программы в нестандартном месте (например, в ~/bin/
).
Я не буду менять оболочку root на zsh
, но я хотел бы поделиться этими настройками, чтобы root мог иметь ее. Я узнаю, что zsh
это не источник /etc/profile
. Я могу найти его /etc/zsh/zprofile
, но я бы хотел другой, более «правильный» способ.
Zsh имеет режим совместимости с sh, который позволит ему выполнять sh код POSIX и некоторые расширения bash. Пока вы не используете функции bash, которых нет у zsh (с одинаковым синтаксисом), вы можете получать один и тот же файл из обеих оболочек. Используйте
emulate
встроенный, чтобы перевести zsh в режим совместимости; с этой-L
опцией эмуляция является локальной для включающей функции (не для входящего в комплект скрипта).Для таких вещей, как переменные среды, вы можете использовать
source_sh /etc/profile
in/etc/zprofile
иsource_sh ~/.profile
in~/.zprofile
, поскольку файлы профиля вряд ли будут использовать специфичные для bash функции.Для таких вещей , как псевдонимы и определение функций, так как оболочка радиоуправляемых файлы, вероятно, содержит много вещей , которые не могут быть разделены (Prompt, привязки клавиша, параметры завершения, ...), используйте файл как
~/.sh_aliases
что добыт в~/.bashrc
иsource_sh
«d в~/.zshrc
.источник
Как насчет простой символической ссылки?
ln -s /etc/profile /etc/zsh/zprofile
Вы также можете добавить что-то вроде этого, если вам нужна условная инициализация:
источник
/bin/ls -l /proc/$$/exe
являетсяps -o comm= -p $$
. Это не совсем надежно, потому что некоторые оболочки ведут себя по-разному в зависимости от того, как они были вызваны; на практике просто тестирование$0
в.profile
, вероятно, будет более точным показателем. Но большинство оболочек , которые предлагают полезные функции (баш, КШ, ЗШ) может быть просто признана (и их версии определили, что большой плюс) путем тестирования некоторых переменных:$BASH
,$BASH_VERSION
,$BASH_VERSINFO
;$KSH_VERSION
,${.sh.version}
;$ZSH_VERSION
,Что касается переменных, у меня сложилось впечатление, что вам не хватает modules & modulefiles [1]. Как только вы начнете это делать, вам будет легко создавать общие профили для различных оболочек (в том числе bash & zsh), python, perl и даже большего количества сред - все из удобства одного файла модуля.
Также возможно определить псевдонимы таким же образом; однако вы быстро обнаружите, что псевдонимы не очень хорошо наследуются между последовательными оболочками и могут нуждаться в обходных решениях.
[1] http://en.wikipedia.org/wiki/Environment_Modules_(software)
источник