Periodicamente, o perfil do shell de origem

4

Sou um usuário zsh, mas isso deve se aplicar a qualquer shell em teoria. Quando edito meu .zshrc para adicionar um novo alias, eu tenho que source ~/.zshrc em todas as minhas abas / janelas de terminal abertas para poder usar o novo alias. Eu estou querendo saber se há alguma maneira de ter meus shells abertos periodicamente fonte meu perfil automaticamente.

    
por swrobel 19.02.2016 / 00:54

3 respostas

2

A solução mais complexa e mais em tempo real é escrever uma função de interceptação do usuário em .zshrc , que quando o sinal interceptado é capturado, origina .zshrc em si.

Assim:

~$ cat .zshrc

trap includerc USR1

includerc() {
   source $HOME/.zshrc
}


alias xxx='df'

No zsh, isso pode ser visto agora:

zshsession> alias
which-command=whence
xxx=df

Agora, algumas alterações no .zshrc

~$ cat .zshrc

trap includerc USR1

includerc() {
   source $HOME/.zshrc
}


alias xxx='df -g'
alias yyy='someothercommand'

Aqui vem a parte complicada. Usando inotify assistindo .zshrc ou por um script watcher que examina a última modificação do comando .zshrc , é acionado que envia o sinal USR1 para todos os processos zsh do usuário. Agora eu apenas corri em outro shell:

~$ ps -a | awk '$4=="zsh" {print $1}' | xargs kill -SIGUSR1

E o resultado é:

zshsession> alias
which-command=whence
xxx='df -g'
yyy=someothercommand
    
por 19.02.2016 / 12:59
1

Como o aliasing do comando é usado regularmente?

Você pode precisar adaptar isso para zsh:

myvi() {

    vi $1 
    source ~/.zshrc
}

alias vi=myvi

Então, quando você vi qualquer coisa, ele irá encontrar ~/.zshrc

Você pode fazer isso com cd ou ls, por exemplo.

atualizar

Outra opção seria compilá-lo no seu prompt:

export PS1="\$(source ~\.zshrc)\u@\h:\w\$"
    
por 19.02.2016 / 01:47
0

Você está absolutamente certo, esta função pode ser construída em qualquer shell, e assim desde mais de um quarto de século.

Não é, e do meu ponto de vista aqui está o porquê. Tal função poderia levar a uma finalização fatal de todos os shells em execução no caso de um menor erro. Exemplo: você tem uma seção de código para depuração que contém

exit 0

e durante a sessão de edição do seu .zshrc , você removeu o código que protegia essa saída para torná-la a regra geral. Toda a sua execução zsh terminará. Você não poderá iniciar outro com o mesmo userid para corrigir seu .zshrc . Você precisará usar outra conta que seja sudo habilitada para corrigir killer .zshrc .

A melhor prática é sempre testar um .zshrc em um shell recém-criado para poder sobreviver.

Esta função ausente é muito sensata.

    
por 03.05.2016 / 08:09