如何根据脚本的当前状态自动替换 .desktop 文件的内容

如何根据脚本的当前状态自动替换 .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”。

不会用正确的 active-icon 替换 inactive-icon,而是会写入一个带有“ Icon=program_active”的全新行,而不是替换现有行“ Icon=program_inactive”。因此,现在有两行带有“ Icon=blabla”,当然这完全没用。

我该怎么做才能替换现有的图标行,而不是写一条无用的新行?非常感谢您的想法!

答案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

相关内容