让我们看一个简单的例子:
我运行一个脚本,该脚本将程序设置为模式“在“ (= 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