Digamos que sua configuração zsh inclui as seguintes linhas para Perl:
PATH="/path/to/your/home/perl5/bin${PATH:+:${PATH}}"; export PATH;
PERL5LIB="/path/to/your/home/perl5/lib/perl5${PERL5LIB:+:${PERL5LIB}}"; export PERL5LIB;
PERL_LOCAL_LIB_ROOT="/path/to/your/home/perl5${PERL_LOCAL_LIB_ROOT:+:${PERL_LOCAL_LIB_ROOT}}"; export PERL_LOCAL_LIB_ROOT;
PERL_MB_OPT="--install_base \"/path/to/your/home/perl5\""; export PERL_MB_OPT;
PERL_MM_OPT="INSTALL_BASE=/path/to/your/home/perl5"; export PERL_MM_OPT;
Os arquivos de configuração do zsh não são scripts, então não é possível, se entendi corretamente, usar variáveis regulares do estilo bash neles.
Mas talvez seja possível, de alguma forma, ter uma variável para a /path/to/your/home/perl5/
parte, de modo que seja mais fácil alterá-la para todas as cinco linhas?
Não tenho certeza de como você pode chegar à conclusão de que
~/.zshrc
não é um script (código na linguagem shell) ou não pode ter atribuição de variáveis (nem por que você acha que o bash teria alguma relevância para o zsh) quando:é obviamente um código shell e, além disso, um código que define variáveis (e as exporta para o ambiente).
Sim,
~/.zshrc
é um script, código esperado para estar na linguagem zsh que invocações interativas de zsh interpretam na inicialização. Ele é tipicamente usado para definir aliases, funções, ztyles, definir opções e variáveis, etc. para personalizar shells interativos, enquanto~/.zprofile
é um script interpretado por invocações de login de zsh para personalizar a sessão de login onde você tipicamente define variáveis de ambiente que serão herdadas ao longo da sessão.O código acima (gerado por
cpan
) é escrito em uma sintaxe compatível com todos os shells do tipo Bourne. Você notará que ele usavar=value; export var
rather thanexport var=value
which is Korn syntax (também especificado por POSIX parash
) mas não funcionaria no shell Bourne nemvar=value export var
which is Bourne, Korn e POSIX mas não funcionaria em versões modernas do zsh a menos que em emulação sh ou ksh.Ele ainda tem
;
um s final que não deveria ser necessário, a menos que as 5 linhas fossem unidas, o que acontece quando as pessoas esquecem as aspas emeval "$(code-that-outputs-those-lines)"
and com o valor padrão$IFS
.Então, sim, você pode definir uma variável de shell para fatorar parte desse código, como:
(que ainda seria compatível com Bourne/Korn/POSIX/zsh)
Você pode até mesmo tornar o código específico do zsh e usar uma função anônima que
$perl_install_base
seja tornada local para não poluir o ambiente com variáveis que não serão mais necessárias depois que essas variáveis perl forem definidas, e usar$path
o array vinculado ao$PATH
zsh e tornar as outras variáveis vinculadas de forma semelhante: