我有这样的脚本:
#!/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的通过可变进料。 谢谢。
由于不使用正则表达式,你可以使用fgrep $CMD
代替grep
这个问题是不是用grep,这是
CLASSPATH="/blah/libs/*:/blah/more/libs"
如果你这样做
echo $CLASSPATH
你应该看到你的shell有*扩展到该目录中的所有文件。 为了解决这个问题,只是用单引号,以防止通配符:
CLASSPATH='/blah/libs/*:/blah/more/libs'
完全无关的特定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?