bash - teclado - simbologia linux
¿Cómo puede grep interpretar literalmente una cadena que contiene un asterisco y se alimenta a grep a través de una variable? (3)
Como no está utilizando expresiones regulares, puede usar fgrep $CMD
lugar de grep
Tengo este script:
#!/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 &
problema es que no funciona debido al asterisco en la variable CMD. ¿Cómo puedo decirle a grep que vea el valor de la variable tal como es? ¿Alguna solución? Es obligatorio que grep se alimente a través de la variable. Gracias.
El problema no es grep, es
CLASSPATH="/blah/libs/*:/blah/more/libs"
Si lo haces
echo $CLASSPATH
debería ver que su shell ha expandido * a todos los archivos en ese directorio. Para remediar esto, solo use comillas simples para evitar englobamiento:
CLASSPATH=''/blah/libs/*:/blah/more/libs''
Totalmente no relacionado con su problema de grep específico, pero jps informará sobre la ejecución de procesos de Java y posiblemente facilitará su almacenamiento, ya que lo más probable es que tenga que hacer:
jps | grep MainClass
(o algo similar)