Quero poder iniciar o zsh com um arquivo rc personalizado semelhante ao comando: bash --rc-file /path/to/file
Se isso não for possível, é possível iniciar o zsh, executar source /path/to/file
e permanecer na mesma sessão do zsh?
Nota: O comando zsh --rcs /path/to/file
não funciona, pelo menos não para mim ...
EDIT: Na íntegra, desejo poder fazer o seguinte:
ssh
em um servidor remoto "example.com", execute zsh
, source
minha configuração localizada em /path/to/file
, tudo em 1 comando. É aqui que luto, principalmente porque prefiro não escrever sobre nenhum arquivo de configuração na máquina remota.
code as such
!Respostas:
Nas páginas do manual:
portanto, você poderá definir a variável de ambiente
ZDOTDIR
como um novo diretório para que o zsh procure um conjunto diferente de arquivos de ponto.Como a página de manual sugere,
RCS
eGLOBAL_RCS
não são caminhos para arquivos rc, como você está tentando usá-los, mas opções que podem ser ativadas ou desativadas. Portanto, por exemplo, o sinalizador--rcs
ativará aRCS
opção, fazendo com que o zsh leia os arquivos rc. Você pode usar os seguintes sinalizadores de linha de comando no zsh para ativar ou desativarRCS
ouGLOBAL_RCS
:Para responder sua outra pergunta:
Sim, isso é bastante fácil de acordo com as instruções acima. Apenas corra
zsh -d -f
e depoissource /path/to/zshrc
.fonte
zsh -d -f; source /path/to/file
nunca executar o segundo comando na primeira sessão do zsh até sair.ssh
para um servidor remoto "example.com", executezsh
,source
minha configuração localizada em/path/to/file
, tudo em 1 comando. É aqui que luto, principalmente porque prefiro não escrever sobre nenhum arquivo de configuração na máquina remota. Obrigado por você responder!ssh host "zsh -d -f; source /path/to/file"
, o ssh será executado primeirozsh
no host remoto esource ...
depois que o shell zsh sair. Em vez disso, o que você deseja fazer éssh -t host zsh -d -f
soltar em um shell interativo no host remoto ou, se você não quiser um shell interativo, façassh host zsh -d -f -c \"source /path/to/file\; other command\; ... \"
.ssh -t host "zsh -d -f; source /path/to/file
me deixa em umzsh
shell interativo (e estéril) .ssh -t host "zsh -d -f; source /path/to/file"
, o comandosource...
NÃO é executado dentro do shell zsh. É executado no seu shell de login após a saída do zsh. Para testar isso, executessh host "zsh; echo foo"
. Você verá a saída "foo" depois de sair do shell zsh.enquanto com o ZDOTDIR, você pode dizer
zsh
para interpretar um arquivo chamado.zshrc
em qualquer diretório de sua escolha, e interpretar qualquer arquivo de sua escolha (não necessariamente chamado.zshrc
) se mostra bastante difícil.Em
sh
ouksh
emulação,zsh
avalia$ENV
; para que você possa adicionaremulate zsh
na parte superior do seu/path/to/file
e fazer:Outra abordagem muito complicada poderia ser:
Esse merece uma explicação.
${foo::=value}
é uma expansão variável que realmente define$foo
.$functions
é uma matriz associativa especial que mapeia nomes de funções para suas definições.Com a
promptsubst
opção, as variáveis in$PS1
são expandidas. Portanto, no primeiro prompt, as variáveis nesse PS1 serão expandidas.A
zsh_directory_name
função é uma função especial que ajuda a expandir o~foo
para/path/to/something
e o inverso. Isso é usado, por exemplo,%~
no prompt para que, se o diretório atual estiver,/opt/myproj/proj/x
você possa exibi-lo como~proj:x
fazendozsh_directory_name
o mapeamentoproj:x
<=>/opt/myproj/proj/x
. Isso também é usado peloD
sinalizador de expansão de parâmetro. Portanto, se alguém se expandir${(D)somevar}
, essazsh_directory_name
função será chamada.Aqui, estamos usando
${(D):-}
,${:-}
que é${no_var:-nothing}
se expande paranothing
se$no_var
está vazio, então${(D):-}
se expande para nada ao chamarzsh_directory_name
.zsh_directory_name
foi definido anteriormente como:Ou seja, na primeira expansão do PS1 (no primeiro prompt),
${(D):-}
apromptsubst
opção será desabilitada (para cancelar a-o promptsubst
),zsh_directory_name()
indefinida (como queremos executá-la apenas uma vez)$PS1
, desabilitada e/path/to/file
originada.${PS1=%m%# }
expande (e atribui$PS1
) a%m%#
menos que o PS1 já esteja definido (por exemplo,/path/to/file
após ounset
) e%m%#
passa a ser o valor padrão dePS1
.fonte