【问题标题】:How to find the similar command in BASH?如何在 BASH 中找到类似的命令?
【发布时间】:2017-08-15 02:42:00
【问题描述】:

环境

  • 普通 linux 中的 Bash
  • 可执行文件:/usr/bin/eexxee

要求

我只需要运行一次以下命令: bash eexxee -a xxxx -b xxxx 我们可以使用以下类似的命令行启动此命令: bash eexxee -b xxxx -a xxxx /usr/bin/eexxee -b xxxx -a xxxx /usr/bin/eexxee -a xxxx -b xxxx 现在我想编写一个 shell/python 脚本来启动这个命令,检查类似的命令行是否正在运行。

问题

我们如何判断这些类似命令行的匹配?

【问题讨论】:

  • 您要测试eexxee -b xxxx -a xxxx 是否与eexxee -a xxxx -b xxxx 相同?

标签: shell command-line matching


【解决方案1】:

不确定你需要多少差异化,但这两个应该足够了:

  1. lsof /usr/bin/eexxee
  2. ps fxau | grep eexxee

【讨论】:

  • 你没有明白我在问题中的意思,狐狸例子,命令“eexxee -b xxxx -a xxxx”正在运行,我想在启动之前检查类似的命令是否正在运行shell脚本中的命令“eexxee -a xxxx -b xxxx”,我们怎么做呢?
  • @colben 如果您希望能够监控正在运行的命令,您可以使用 python 中的 subprocess 模块。这样您就可以检查该进程是否正在运行。关于确定在 python 中运行哪些进程的一个很好的答案是:[stackoverflow.com/questions/26688936/… (stackoverflow.com/questions/26688936/…) 如果您想要非常精细地控制进程运行的细节,那么 Python 可能是您的最佳选择
【解决方案2】:

也许这样的事情会有所帮助。

我在写这篇文章时做了一些假设。 我假设 xxxx 和 yyyy 将始终是第二或第四个参数。

#!/usr/bin/bash

# exeee -a xxxx -b yyyy
# $0 = exeeee
# $1 = -a
# $2 = xxxx
# $3 = -b
# $4 = yyyy

pid=$$

cnt=$(
ps -ef |\
grep 'eexxee -[ab] '"$2"' -[ab] '"$4"'$' |\
grep -v $pid |\
wc -l
)

if [ $cnt -ne 0 ];then
   echo "another instance running"
   exit 1
fi

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-02
    • 1970-01-01
    相关资源
    最近更新 更多