首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Bash pgrep regexp函数

Bash pgrep regexp函数
EN

Stack Overflow用户
提问于 2018-06-05 05:32:29
回答 1查看 533关注 0票数 0

我想创建一个bash脚本,它将检查foo是否已经在运行,如果没有,则运行它。

代码如下:

代码语言:javascript
复制
#!/usr/bin/env bash

function run {
 if ! pgrep $1;
 then
  $@
 fi
}
run foo

执行脚本后,尽管foo已经在运行,但它还是启动了foo的另一个实例。

pgrep foo返回进程号,所以我可以让脚本先终止它,然后再启动foo,但我想知道这是否可以像上面描述的那样完成。这里我漏掉了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-05 06:17:28

以下是一些改进:

代码语言:javascript
复制
function run {
    if ! pgrep -x "$1" >/dev/null
    then
        "$@"
    fi
}
run foo bar "baz qux"

备注:

  1. quote your variables。这将保留pgrep
  2. 的输出中包含whitespace.
  3. redirect的任何单词。与包含"foo"

的进程相反,请使用-x pgrep选项来限制对名为"foo“的进程的搜索

您可以将其缩短为

代码语言:javascript
复制
run() { ! pgrep -x "$1" >/dev/null && "$@"; }

我们可以编写pgrep -x "$1" >/dev/null || "$@",但是如果进程已经在运行,这将返回一个成功的退出状态,我认为如果进程不能启动,返回一个失败状态会更有意义。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50689078

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档