A saída do comando shell não está sendo exibida no status do tmux

1

Eu tenho o seguinte status-right :

set -g status-right "#{prefix_highlight}[wifi:#[fg=brightred]#(wifi_status)#[fg=yellow]|#[fg=brightgreen]#{cpu_icon}#[fg=yellow]:#{cpu_percentage}|#{battery_icon}:#{battery_percentage}:#{battery_remain}] %a %h-%d %H:%M:%S#[default]"

e nele o comando de shell personalizado wifi_status .

que executa uma função ( wifi_quality ) que obtém o status do Wi-Fi e o exibe usando faísca .

Isso estava funcionando quando eu tinha o arquivo wifi_status em /usr/local/bin , mas eu queria no meu repositório de controle de versão para meus dotfiles, então eu mudei para uma pasta bin na pasta .zsh e adicionei a pasta para meu caminho usando %código%. Eu posso usar o comando no terminal do shell (mesmo no tmux) e exibe a saída correta:

▁▃▅█

Mas ele não será mais exibido na barra de status do tmux.

O que está acontecendo?

É a pasta em $HOME/.zsh/bin , a configuração foi recarregada, funciona no terminal, o arquivo foi definido como executável, não entendi, por que agora não está funcionando?

Desde que foi perguntado:

Eu inicio o tmux digitando-o no meu terminal ( $PATH ).

Meu sistema operacional é OSX.

Estou correndo xterm2.

Meu shell de login é ZSH com estrutura Oh-My-Zsh.

Meus dotfiles estão localizados aqui .

Fazendo o seguinte na linha de comando do tmux (prefixo)

set-environment PATH $PATH

define a variável tmux new e aparece ao fazer PATH .

Copiar + colar show-environment de volta para a pasta wifi_status também não corrigiu o problema (mesmo com uma reinicialização do tmux).

Escrever o caminho completo para o script também não ajuda.

Resolvi o problema. Por algum motivo, meu arquivo de funções personalizadas não estava sendo gerado corretamente e, como resultado, ele não pôde ser executado. Mover a função para o arquivo resolveu isso e agora está funcionando.

    
por Thermatix 02.08.2016 / 13:11

1 resposta

2

Olhando para a sua configuração , você define várias variáveis de ambiente em .zshrc , incluindo PATH . Não faça isso. O arquivo .zshrc é lido quando você inicia um shell interativo, portanto, as variáveis que ele configura só estarão disponíveis nos programas iniciados a partir de um shell interativo. Eles não estão disponíveis em programas que são iniciados de outras maneiras, em particular a partir de um menu GUI.

Você não disse como começou o tmux. Se você iniciá-lo sem passar por um shell interativo (por exemplo, a partir de um arquivo de tempo de login ou diretamente dentro de um terminal GUI em vez de digitar t m x em um prompt interativo), então essas variáveis de ambiente não estão definidas no processo do tmux.

Mova suas definições de variáveis de ambiente para um arquivo que é executado no momento do login. Qual arquivo é executado depende de seu shell de login e, para logins da GUI, depende de como o sistema configurou a inicialização da sessão, que depende da distribuição e do gerenciador de exibição. A maioria das configurações executa o código shell a partir de ~/.profile no login, portanto coloque suas definições de variáveis de ambiente lá.

Se o seu shell de login é bash, certifique-se de que você não tenha um ~/.bash_profile ou que contenha as duas linhas seguintes e nada mais:

. ~/.profile
if [[ $- = *i* ]]; then . ~/.bashrc; fi

Se o seu shell de login for zsh, certifique-se de que seu ~/.zprofile contenha a seguinte linha:

emulate sh -c '. ~/.profile'

Como alternativa, na maioria dos sistemas, você pode definir variáveis de ambiente em ~/.pam_environment . Observe que esse arquivo tem uma sintaxe simples de VARIABLE=VALUE , sem aspas, $ expansion, etc.

Para mais detalhes, consulte Qual é a melhor maneira de distribuir as variáveis de ambiente?

    
por 03.08.2016 / 02:17

Tags