我正在使用 Ubuntu 20.04,我正在寻找一个 bash 脚本来同时启动 Quodlibet(音乐应用程序)和 conky。编辑:这个想法是在 .desktop 启动器中使用 sh 脚本
- 开始Quodlibet
- 2秒后启动conky
- 如果 Quodlibet 关闭,则关闭 conky
我做了一些测试,但我相信下面的脚本不会工作,因为我没有注意到 Quodlibet 的结束。当我关闭 Quodlibet 时,Conky 仍在运行。
#!/bin/bash
trap "exit" INT TERM ERR
trap "kill 0" EXIT
quodlibet &
sleep 2 &&
conky &
wait
编辑:独立的.sh解决方案
工作脚本,感谢@berndbausch。
#!/bin/bash
quodlibet & QUODPID=$!
sleep 3 &&
conky & CONKYPID=$!
wait $QUODPID
kill $CONKYPID
编辑:使用自定义启动器
正如 @xhienne 在他的回答中所解释的,exec=setsid /path/to/script.sh
在 .desktop 文件以及他的脚本中使用效果很好。
答案1
只需在当前 shell 中启动 Quodlibet,而不是在子进程中:
#!/bin/bash
trap "exit" INT TERM ERR
trap "kill 0" EXIT
(sleep 2 && conky) &
quodlibet
[更新] 您提到您想.desktop
在图形环境中从文件运行此脚本。 @fra-san 让我意识到,以这种方式运行的每个进程都可能继承其父进程的进程组,因此,kill 0
将杀死该启动器进程以及(可能)它已启动的所有进程。这当然不是你想要的。
解决方案是启动脚本,setsid
以便创建一个专用于它的新进程组:
setsid /path/to/script.sh