如何可以grep译作字面上包含星号,并送入通过一个变量到grep一个字符串?(How can gre

2019-10-17 19:14发布

我有这样的脚本:

#!/bin/bash
CLASSPATH="/blah/libs/*:/blah/more/libs"
CMD="java -cp $CLASSPATH MainClass"
ALREADY_RUNNING_PID=`ps -ef --no-headers | grep $CMD | grep -v grep | awk '{print $2}'`
if [ "$ALREADY_RUNNING_PID" ]; then
      echo "Already running"
      exit 1
fi
$CMD &

问题是,它不工作,由于在CMD变星号。 我怎么能告诉grep命令来查看变量的值,因为它是什么? 任何解决方案? 它是强制性的,grep的通过可变进料。 谢谢。

Answer 1:

由于不使用正则表达式,你可以使用fgrep $CMD代替grep



Answer 2:

这个问题是不是用grep,这是

CLASSPATH="/blah/libs/*:/blah/more/libs"

如果你这样做

echo $CLASSPATH

你应该看到你的shell有*扩展到该目录中的所有文件。 为了解决这个问题,只是用单引号,以防止通配符:

CLASSPATH='/blah/libs/*:/blah/more/libs'


Answer 3:

完全无关的特定grep的问题,但JPS将上运行的Java进程报告,并有可能使你的grepping容易,因为你极有可能只是做:

jps | grep MainClass

(或类似的东西)



文章来源: How can grep interpret literally a string that contains an asterisk and is fed to grep through a variable?
标签: bash grep