urxvt -e não fonte .zshrc

1

Eu quero criar uma ligação de chave para a tarefa comum: abra uma nova janela de terminal e abra o programa ranger nela.

O comando óbvio seria algo assim:

urxvt -e ranger

As coisas importantes funcionam logo de cara. Mas em ranger eu quero usar um programa diferente chamado fzf , e este programa não foi encontrado. A mensagem de erro zsh:1: command not found: fzf .

O mesmo resultado com

urxvt -e zsh -c ranger

Quando já tenho um terminal aberto e chamo ranger , então fzf pode ser chamado sem nenhum problema.

Eu dei uma olhada, e o caminho para o binário de fzf foi adicionado ao $PATH no meu .zshrc . Portanto, minha suposição é que isso nunca origina meu .zshrc e nunca é adicionado ao caminho.

Existe uma solução óbvia para isso (chame fzf dentro de ranger usando o caminho completo ~/.fzf/bin/fzf ), mas esse problema me incomodou algumas vezes e eu quero uma boa solução.

Como posso abrir um novo terminal, que gera .zshrc e abre o programa ranger ?

Mais uma observação que não entendo:

Eu criei um script myranger.sh :

#!/usr/bin/zsh
source ~/.zshrc
ranger

e criou o novo terminal com:

urxvt -e myranger.sh

O terminal com ranger é aberto, mas fzf ainda não está em $PATH . O que eu senti falta aqui?

Btw, isso não é zsh ou urxvt específico. Eu também testei isso com bash e / ou gnome-terminal .

    
por Jakube 28.12.2017 / 22:26

2 respostas

6

urxvt -e zsh -c ranger é praticamente equivalente a urxvt -e ranger . Você está dizendo para o urxvt rodar zsh e zsh para executar o ranger, e é isso. urxvt -e zsh -c ranger não carrega .zshrc : zsh carrega apenas ao iniciar um shell interativo , ou seja, um shell que lê comandos do usuário, não ao iniciar um shell que executa um script (se este script está em um arquivo ou passado na linha de comando com -c ).

Você pode carregar .zshrc explicitamente ( urxvt -e zsh -c '. ~/.zshrc; ranger' ou usar um script de wrapper como fez). Isso não é uma boa idéia, porque .zshrc é para configurações interativas de associações de teclas zsh, aliases, etc. Configurações de variáveis de ambiente (por exemplo, PATH) se aplicam a todos os programas, portanto devem ser feitas no momento do login, href="https://superuser.com/questions/183870/difference-between-bashrc-and-bash-profile/183980#183980"> geralmente em ~/.profile . Mova sua configuração de PATH de .zshrc para .profile de onde pertence.

    
por 28.12.2017 / 22:57
1

Citando zsh manual:

INVOCATION

-i Force shell to be interactive.

e mais tarde

If the shell is a login shell, commands are read from /etc/zprofile and then $ZDOTDIR/.zprofile. Then, if the shell is interactive, commands are read from /etc/zshrc and then $ZDOTDIR/.zshrc. Finally, if the shell is a login shell, /etc/zlogin and $ZDOTDIR/.zlogin are read.

...

If ZDOTDIR is unset, HOME is used instead.

Portanto, para forçar o fornecimento de .zshrc na execução inicial

urxvt -e zsh -ci ranger
    
por 28.12.2017 / 22:52