O shell que eu normalmente uso é zsh
. Eu tenho vários aliases para ativar a cor em alguns programas como ls
e grep
. Também configurei meu caminho personalizado para executar programas em locais não padrão (como em ~/bin/
).
Eu não vai mudar shell de raiz para zsh
, mas eu gostaria de compartilhar essas configurações para que o root pode tê-lo também. Eu descobri que zsh
não é fonte /etc/profile
. Eu posso obtê-lo /etc/zsh/zprofile
, mas gostaria de outra maneira mais "adequada".
O Zsh possui um modo de compatibilidade sh que permitirá executar o código sh POSIX e algumas extensões bash. Desde que você não use os recursos do bash que o zsh não possui (com a mesma sintaxe), você pode ter o mesmo arquivo originado pelos dois shells. Use o
emulate
built-in para colocar o zsh no modo de compatibilidade; com a-L
opção, a emulação é local para a função anexa (não o script de origem anexado).Para coisas como variáveis de ambiente, é possível usar
source_sh /etc/profile
in/etc/zprofile
esource_sh ~/.profile
in~/.zprofile
, pois os arquivos de perfil provavelmente não usam recursos específicos do bash.Para coisas como aliases e definições de funções, como os arquivos shell rc provavelmente contêm muitas coisas que não podem ser compartilhadas (prompt, combinações de teclas, configurações de conclusão, ...), use um arquivo como o
~/.sh_aliases
que é fornecido~/.bashrc
esource_sh
'd no~/.zshrc
.fonte
Que tal um link simbólico simples?
ln -s /etc/profile /etc/zsh/zprofile
Você também pode acrescentar algo assim se precisar de alguma inicialização condicional:
fonte
/bin/ls -l /proc/$$/exe
éps -o comm= -p $$
. Isso não é totalmente confiável, porque algumas conchas se comportam de maneira diferente, dependendo de como foram invocadas; na prática, simplesmente testando$0
em.profile
é provável que seja uma indicação melhor. Mas a maioria das conchas que oferecem recursos úteis (bash, ksh, zsh) podem ser simplesmente reconhecidos (e sua versão identificado, que é um grande plus), testando algumas variáveis:$BASH
,$BASH_VERSION
,$BASH_VERSINFO
;$KSH_VERSION
,${.sh.version}
;$ZSH_VERSION
.No que diz respeito às variáveis, tenho a impressão de que estão faltando módulos e modulefiles [1]. Quando você começar a fazer isso, será fácil criar perfis comuns para vários shells (incluindo bash e zsh), python, perl e ainda mais ambientes, tudo isso com a conveniência de um único arquivo de módulo.
Também é possível definir aliases da mesma maneira; no entanto, você descobrirá rapidamente que os aliases não são herdados muito bem entre shells sucessivos e podem precisar de soluções alternativas.
[1] http://en.wikipedia.org/wiki/Environment_Modules_(software)
fonte