我有这个脚本:
#!/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必须通过变量输入。 感谢。
答案 0 :(得分:4)
由于您没有使用正则表达式,因此可以使用fgrep $CMD
代替grep
答案 1 :(得分:1)
问题不是grep,而是
CLASSPATH="/blah/libs/*:/blah/more/libs"
如果你这样做
echo $CLASSPATH
你应该看到你的shell已经将*扩展到该目录中的所有文件。要解决这个问题,只需使用单引号来防止通配:
CLASSPATH='/blah/libs/*:/blah/more/libs'
答案 2 :(得分:1)