Atualização do status da bateria CLI no prompt

0

Estou usando um CLI Arch Linux e quero executar um Script Shell / Bash para mostrar o status da minha bateria com acpi diretamente no prompt de string ( PS1).

Eu criei o seguinte Shell Script para me mostrar o status da bateria:

# Permition Acess: chmod +x loop.sh
# run .sh: ./loop.sh

i=true
#COLOR:
ORANGE='\e[33m'
STOP='\e[0m'

while ($i = true)
do
 printf ${ORANGE}
 echo $(clear)
 echo $(acpi -b)
 sleep 1
printf ${STOP}
done

Minha idéia é conectar o script no PS1 para continuar mostrando o status da bateria sempre atualizar!

Meu PS1 atual é:

PS1='[${OR}USER: \u ${B}TIME: \t ${C}DIR: \W ${RED}$(__git_ps1 " (%s)")]\n[${LG}$(acpi -b)${R}]\n\$

Eu estou chamando o acpi , mas ele só atualiza quando eu uso algum comando

    
por F4NT0 18.05.2018 / 19:14

1 resposta

1

não há maneira portátil de fazer o que você quer, mas um método específico de shell provavelmente funcionará.

As variáveis de prompt (PS1, PS2, etc.) têm dois tipos específicos e distintos de avaliação que são principalmente portáveis: expansão de atribuição que é exatamente como qualquer outra expansão de atribuição de variável que permitirá expansão de subcomando não é adequada para monitoramento de bateria como essa expansão ocorre apenas uma vez e a expansão de prompt pode não permitir a expansão do comando, mas é expandida a cada exibição de prompt.

Observe que nenhum dos métodos fornece uma possibilidade de monitoramento contínuo da bateria, o melhor caso é o status da bateria quando o prompt foi exibido pela última vez.

Agora, para os métodos não portáteis, que provavelmente farão o que você deseja. O Bash tem dois métodos para executar comandos arbitrários na hora do prompt: PROMPT_COMMAND e shopt promptvars. PROMPT_COMMAND é fácil e simples, basta configurá-lo para o comando para executar antes de mostrar o prompt. O promptvs shopt é mais complicado, pois a cotação é mais complicada. A principal desvantagem é que ambos os métodos são bash específicos, outros shells diferem.

    
por 20.05.2018 / 11:30