我的主文件夹中有一个 gnome 运行的应用程序。我现在已经添加了当我按Meta+时要运行的应用程序R(我将其添加到CCSM)。我通过在我的主文件夹中执行来运行该应用程序./gnome-run
。
我在 的输出中找不到任何应用程序进程的痕迹ps -A
。
问题是,如果我打开 gnome-run 程序并按下组合键,我希望应用程序关闭。有没有办法创建一个 bash 文件来检查应用程序是否正在运行?如果是则关闭它,否则启动它。
答案1
这个 shell 脚本应该处理任何程序的启动和停止:
#!/bin/bash
BASECMD=${1%%\ *}
PID=$(pgrep "$BASECMD")
if [ "$?" -eq "0" ]; then
echo "at least one instance of "$BASECMD" found, killing all instances"
kill $PID
else
echo "no running instances of "$BASECMD" found, starting one"
$1
fi
假设您将其保存在 下~/mystarter
,您可以使用它运行任何命令~/mystarter <name>
,例如,在您的情况下,将Meta+绑定R到:
~/mystarter gnome-run
并确保脚本可执行:chmod u+x ~/mystarter
.另外,最好将其放在您的某个位置PATH
,这样您就不必每次都键入它的完整位置。
gnome-run
至于没有出现在 中的事实ps -A
,请确保 gnome run 本身不是启动实际进程的脚本。检查ps -A | wc -l
启动前后是否有差异(这会计算所有正在运行的进程)。
编辑:
既然您已经接受了答案,我想我应该添加对运行具有命令行参数的命令的支持,以便这可能成为一个参考点。运行如下命令:
./mystarter 'cmd args'
例如:
./mystarter 'ncmpcpp -c ~/.ncmpcpp'
该命令只是查找它是否已在运行,但在未运行ncmpcpp
时执行完整命令(带参数) 。ncmpcpp