在 bash 中接收命令作为参数

在 bash 中接收命令作为参数

我有一个名为单实例的以下简单脚本,如果该命令下没有进程正在运行,则该脚本会执行给定的命令。如果我在 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

你想做什么?保持某种类型的守护进程始终运行?也许你应该看看系统

相关内容