【问题标题】:Can't grep command resultats in bash script无法在 bash 脚本中 grep 命令结果
【发布时间】:2017-10-09 09:34:09
【问题描述】:

早安,

上下文: 我想每分钟检查一次 python 脚本是否正在运行。在我的 cron 中,我调用了一个脚本。该脚本的目标是检查进程是否正在运行。

我的脚本:

#!/bin/bash
DIR="path/to/directory"
CMD="python3 -u $DIR/script.py -arg1 $DIR/arg1 -arg2 $DIR/arg2 -arg3 $DIR/arg3"

if [ ! $(ps aux | grep 'my_pattern' | grep -v 'color')]
then
    echo "Success"
    "$CMD" > /dev/null
fi

使用这个脚本,我想 grep 过程并反转 grep 以排除颜色过程。如果进程正在运行,命令 (ps aux | grep 'my_pattern' | grep -v 'color') 会返回一些东西,如果没有,该命令不会返回任何东西。

错误是 ./script.sh: line 12: [!myuser+ : Untraceable command

命令的执行并没有返回命令的结果,而是返回命令的进程号,就像我对命令执行 ps aux 一样。

如果不清楚,请询问,我很难翻译这个问题。

感谢您的回答。

编辑:我已经申请了这样的条件:

if [[ -z $(ps aux | grep 'my_pattern' | grep -v 'color') ]]

现在我没有任何错误,但它从未进入我的 if 条件。

【问题讨论】:

  • 你有一个错字'color')]应该是'color') ]

标签: linux bash shell grep


【解决方案1】:

if [[ -z $(ps aux | grep 'my_pattern' | grep -v 'color') ]]

(请注意 klashxx 所示的错字)

您可以检查变量是否为空。

所以我认为不是使用“!”,而是检查 ps aux 的 grepping 是否返回空字符串更合适和有效。

如果这对你有帮助,请告诉我。

已编辑:将 '[' 更正为 '[['

再次编辑:让其他用户知道,如果您需要使用此方法检查进程是否存在,请在 -z 标志之前附加 ! 以查看它是否不为空

【讨论】:

  • 感谢您的回答。你的回答很好地帮助了我,但我有一个新问题(很好)。 ./script.sh:第 12 行:[:参数太多
  • 别担心,我已经在您回答后尝试过。现在我没有任何错误,但它永远不会进入我的 if 条件......非常感谢
  • 请记住,如果结果为空,-z 返回 true(并输入 if)...所以如果您想检查进程是否存在,您应该检查 -z 标志是否为 false。 。喜欢 ! -z
  • 好的,谢谢。只是对 if 条件感到愚蠢。它有效。
  • 没问题 ;) 很高兴听到它起作用了 :) 编码愉快
猜你喜欢
  • 2015-09-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-02-05
  • 2020-07-19
  • 2017-12-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多