Как автозаменить содержание .desktop-файла в зависимости от текущего состояния сценария

Давайте иметь легкий пример:

Я запускаю скрипт, который устанавливает программу любой на режим "на" (= 1) или на режим "прочь" (= 0). Сценарий становится приводимым в действие простым щелчком по оценке .desktop- файл.


Сценарий похож на это:

#!/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

.desktop-файл похож на это:

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

Мой вопрос теперь:

Если я включаю свою программу путем приведения в действие .desktop- файл, название .desktop- файл становится измененным на "Работу программы", что полностью корректно! К сожалению, предыдущий значок ("program_inactive"), не становится измененным на теперь необходимый значок"program_active".

Вместо того, чтобы заменить неактивный значок корректным активным значком, там будет записан абсолютно новая строка с"Icon=program_active"вместо того, чтобы заменить существующую строку"Icon=program_inactive". Из-за этого существует теперь две строки с"Icon=blabla"что абсолютно бесполезно, конечно.

Что я должен сделать для замены существующей строки значка вместо того, чтобы писать бесполезную новую строку? Большое спасибо за Ваши идеи!

1
задан 13 March 2017 в 03:30

1 ответ

Попытайтесь перезаписать файл вместо этого.

#!/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

Объяснение:

Эти cat <<EOF скопирует что-либо до следующего EOF отдельно, интерпретируя переменные.

4
ответ дан 3 December 2019 в 06:54

Другие вопросы по тегам:

Похожие вопросы: