Давайте иметь легкий пример:
Я запускаю скрипт, который устанавливает программу любой на режим "на" (= 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
"что абсолютно бесполезно, конечно.
Что я должен сделать для замены существующей строки значка вместо того, чтобы писать бесполезную новую строку? Большое спасибо за Ваши идеи!
#!/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
отдельно, интерпретируя переменные.