Script de bash para power AC plugin

0

Estou trabalhando em um script bash que é executado em um loop infinito de 1 segundo, em que se detectar que o computador está conectado à energia CA, ele reproduzirá o arquivo plugin.ogg com ogg123 e, se não for plugado, ele reproduz um arquivo silencioso Silence.ogg . No entanto, tenho alguns problemas. Em primeiro lugar, parece não mais loop (provavelmente um efeito colateral do wait eu tive que jogar em ordem para evitar um som de entrada do carregador de loop após a primeira detecção. Em segundo lugar, não parece querer mudar para o / directory e, portanto, (não tenho certeza se devido ao erro / ou outra coisa) não consegue encontrar os arquivos para jogar. Por favor, ajude a corrigir isso, obrigado!

#!/bin/bash
"cd /"

while true
do
    if on_ac_power; then 
        "ogg123 plugin.ogg"               ## Laptop on power
    else
        "ogg123 Silence.ogg"          ## Laptop on battery
    fi
    sleep 10                       ## wait 10 sec before repeating
done

Saída do terminal, se executada enquanto o computador está desconectado:      /home/brenden_mcfarling_live/Desktop/ac0.sh: line 3: cd /: No such file or directory

/home/brenden_mcfarling_live/Desktop/ac0.sh: line 10: ogg123 Silence.ogg: command not found

Saída do terminal quando executado enquanto conectado: /home/brenden_mcfarling_live/Desktop/ac0.sh: line 3: cd /: No such file or directory

/home/brenden_mcfarling_live/Desktop/ac0.sh: line 8: ogg123 plugin.ogg: command not found

Qualquer ajuda seria apreciada!

    
por Brenden McFarling 10.01.2018 / 18:00

2 respostas

0

Primeiro: Por que você está mudando de diretório para root /? Seus arquivos estão localizados lá?

Remova os qoutes ".." do seu comando. Então parece que

% bl0ck_qu0te%

Verifique se você instalou o pacote vorbis-tools

% bl0ck_qu0te%     
por JonnyTischbein 10.01.2018 / 18:54
0

Como @JonnyTischbein disse : remova as aspas de seus comandos porque senão o shell tentará executar o comando literal "cd /" , isto é, ele irá procurar por um arquivo executável chamado "cd /" e executá-lo. Claro que não existe e você recebe bash: cd /: No such file or directory .

O mesmo vale para "ogg123 plugin.ogg" . Ele tentará executar o arquivo "ogg123 plugin.ogg" , que também não existe. Dadas suas outras mensagens de erro, presumo que os arquivos * .ogg residem em /home/brenden_mcfarling_live/Desktop (e não em / ). Assim, depois de mudar para / , os arquivos não podem mais ser encontrados e você precisa fornecer o caminho completo.

Coloque juntos:

#!/bin/bash
cd /

while true
do
    if on_ac_power; then 
        ## Laptop on power
        ogg123 /home/brenden_mcfarling_live/Desktop/plugin.ogg
    else
        ## Laptop on battery
        ogg123 /home/brenden_mcfarling_live/Desktop/Silence.ogg
    fi
    ## wait 10 sec before repeating
    sleep 10
done

Se o path-to ou filename-dos arquivos de som continham espaços, então você pode usar aspas , mas apenas em torno do nome do arquivo :

ogg123 "/home/brenden_mcfarling_live/Desk Top/Very silent sound.ogg"

Você também pode querer dar uma olhada em esta pergunta (e sua resposta) em Unix & amp; Linux . Lá eles dizem como capturar imediatamente o evento de conectar / desconectar o adaptador AC para que você não precise enquete a cada 10 segundos, mas ser acionado.

Eu admito, é um pouco complicado à primeira vista, mas a ideia é:

  • Faça uma palpite informada sobre quais eventos acontecem quando o cabo é conectado e desconectado
  • Escreva um script chamado "plugged in" (que reproduz seu primeiro arquivo de som)
  • Escreva um script chamado "plugged out" (que reproduz seu segundo arquivo de som)
  • Crie duas regras em um novo arquivo abaixo de /etc/udev/rules.d que digam "quando conectado, execute script1.sh" e "quando desconectado e execute script2.sh"
por PerlDuck 10.01.2018 / 20:35