Как grep может интерпретировать буквально строку, которая содержит звездочку и подается в grep через переменную? - PullRequest
1 голос
/ 08 октября 2009

У меня есть этот скрипт:

#!/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 передавался через переменную. Спасибо.

Ответы [ 3 ]

4 голосов
/ 08 октября 2009

Поскольку вы не используете регулярные выражения, вы можете использовать fgrep $CMD вместо grep

1 голос
/ 08 октября 2009

Абсолютно не связано с вашей конкретной проблемой grep, но jps сообщит о запущенных процессах Java и, возможно, упростит ваш grep, поскольку вам, скорее всего, придется просто сделать:

jps | grep MainClass

(или что-то подобное)

1 голос
/ 08 октября 2009

Проблема не в grep, а в

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

Если вы делаете

echo $CLASSPATH

вы должны увидеть, что ваша оболочка расширила * для всех файлов в этом каталоге. Чтобы исправить это, просто используйте одинарные кавычки, чтобы предотвратить сбои:

CLASSPATH='/blah/libs/*:/blah/more/libs'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...