我有一个名为单实例的以下简单脚本,如果该命令下没有进程正在运行,则该脚本会执行给定的命令。如果我在 else 语句之后对命令进行硬编码,则运行不会出现问题,但如果我用 $1 或 $@ 替换硬编码命令,则不会得到该命令的新实例。 bash 中是否有安全机制来阻止此类命令?
#!/bin/bash
if ps ax | grep -v grep | grep $1 > /dev/null;then
wmctrl -xa $1
else
# works fine if I switch $1 to terminator
$1
fi
if 语句部分工作正常。只要我使用此脚本调用该流程,我就只能获得该流程的一个实例。
答案1
Grep 看到由“单实例”调用的命令名称 我在 grep 选项中添加了守护进程,因为某些程序有守护进程在运行,即使其实例在窗口管理器上不存在。
#!/bin/bash
if ps -fp $(pgrep -d, "$1") egrep -v "single-instance|daemon" | grep $1;then
wmctrl -xa $1
else
$1
fi
感谢米克尔指导我解决这个问题。
答案2
你想做什么?保持某种类型的守护进程始终运行?也许你应该看看系统。