Como substituir automaticamente o conteúdo do arquivo .desktop dependendo do estado atual de um script

1

Vamos dar um exemplo simples:

Eu corri um script que está configurando um programa para o modo " on " (= 1) ou para o modo " off " (= 0). O script está sendo acionado por um simples clique no arquivo .desktop .

O script é assim:

#!/bin/bash

DESKT=/home/user/program.desktop

if [ $(systemctl --user status program | grep -c running) = 0 ]; then
    systemctl --user start program
    echo "Icon=program_active" >> "$DESKT"
    echo "Name=Program working" >> "$DESKT"
else
    systemctl --user stop program
    echo "Icon=Program_inactive" >> "$DESKT"
    echo "Name=Program stopped" >> "$DESKT"
fi

O arquivo .desktop é assim:

[Desktop Entry]
Type=Application
Name=Program
Exec=program
Icon=program-inactive

A minha pergunta agora é:

Se eu ativar meu programa ativando o .desktop -file, o nome do arquivo .desktop será alterado para "Program working", o que é totalmente correto! Infelizmente, o ícone anterior (" program_inactive ") não foi alterado para o ícone agora necessário " program_active ".

Em vez de substituir o ícone inativo pelo ícone ativo correto, será gravada uma linha completamente nova com " Icon=program_active " em vez de substituir a linha existente " Icon=program_inactive ". Por causa disso, agora existem duas linhas com " Icon=blabla ", o que é completamente inútil, é claro.

O que devo fazer para substituir a linha de ícones existente em vez de escrever uma nova linha inútil? Muito obrigado pelas suas ideias!

    
por Dave 13.03.2017 / 01:30

1 resposta

4

Tente sobrescrever o arquivo.

#!/bin/bash

DESKT=/home/user/program.desktop

if [ $(systemctl --user status program | grep -c running) = 0 ]; then
    systemctl --user start program
    icon=active
    name=working
else
    systemctl --user stop program
    icon=inactive
    name=stopped
fi

cat > "$DESKT" <<EOF
[Desktop Entry]
Type=Application
Name=Program $name
Exec=program
Icon=program_$icon
EOF

Explicação:

O cat <<EOF copiará qualquer coisa até o próximo EOF , interpretando variáveis.

    
por luk3yx 13.03.2017 / 01:37