Problema con ejecucion de procesos en Shell

Temas sobre programación ( php, c, sql, html, perl, python, ruby, java, bash, etc ) y recursos ( herramientas, frameworks, hosting, cms, etc )

Moderadores: maiku, akodo

Responder
Avatar de Usuario
Jochelo
Forista Nuevo
Forista Nuevo
Mensajes: 9
Registrado: Mar Dic 13, 2011 3:29 pm
Ubicación: /HOME

Problema con ejecucion de procesos en Shell

Mensaje por Jochelo »

tengo el siguiente extracto de shell

APP_HOME=/usuarios/exgesccr/lancorp/Shell;

if ($APP_HOME/LC_acumulacion $APP_HOME/LC_acumulacion.xml); then
echo "done"
else
echo "fail "
fi

Donde LC_acumulacion es un bynario compilado de C++ y LC_acumulacion.xml es el archivo de configuraciones.

Si lo ejecuto de esta forma la condición asume falso, lo que es correcto, ya que por default es asi.

El programa principal si todo es correcto retorna un 1. Por lo que hice la siguiente modificación:

APP_HOME=/usuarios/exgesccr/lancorp/Shell;

if ($APP_HOME/LC_acumulacion $APP_HOME/LC_acumulacion.xml) = 1; then
echo "done"
else
echo "fail "
fi

De esta forma me arroja lo siguiente:
start_acumulacion.sh: syntax error at line 10: `=1' unexpected
(start_acumulacion.sh es el nombre de la shell)

Haciendo la analogía con java.
tengo un metodo declarado de la siguiente forma:

public int haceAlgo(){
return 1;
}

Si yo invoco esto de la siguiente forma:
int resultado = haceAlgo();

Entonces al ejecutar me quedare con que "resultado" tiene el valor 1
por lo que si hago el siguiente if:
if (resultado == 1){
logger.debug("Done");
}
el archivo log escribiría Done.

Es esto lo que trato de hacer, pero no lo consigo en Shell

Alguna idea de como corregir esto???

Saludos

Avatar de Usuario
maiku
Moderador
Moderador
Mensajes: 1531
Registrado: Jue Abr 19, 2007 7:00 am
Ubicación: Cojutepeque, El Salvador C. A.

Re: Problema con ejecucion de procesos en Shell

Mensaje por maiku »

creo que hay muchas diferencias respecto a bash y java por lo que uno no te sirve para asegurar que va funcionar en el otro.

primero necesitas saber la existencia de un fichero por lo que entiendo debes ejecutar:

Código: Seleccionar todo

if [ -e $APP_HOME/LC_acumulacion $APP_HOME/LC_acumulacion.xml ]  ; then
que no es lo mismo que usar el = (comparación entre caracteres ) y tampoco la comparación numéricas para un valor "igual" -eq http://www.linux-es.org/node/238

el problema no es de bash, es de conceptos.
Grüße...
Maiku

Full linux alchemist!!!

Avatar de Usuario
Jochelo
Forista Nuevo
Forista Nuevo
Mensajes: 9
Registrado: Mar Dic 13, 2011 3:29 pm
Ubicación: /HOME

Re: Problema con ejecucion de procesos en Shell

Mensaje por Jochelo »

maiku escribió:creo que hay muchas diferencias respecto a bash y java por lo que uno no te sirve para asegurar que va funcionar en el otro.

primero necesitas saber la existencia de un fichero por lo que entiendo debes ejecutar:

Código: Seleccionar todo

if [ -e $APP_HOME/LC_acumulacion $APP_HOME/LC_acumulacion.xml ]  ; then
que no es lo mismo que usar el = (comparación entre caracteres ) y tampoco la comparación numéricas para un valor "igual" -eq http://www.linux-es.org/node/238

el problema no es de bash, es de conceptos.
Claramente existen diferencias entre ambos lenguajes, por ello hice una analogia para mostrar mas técnicamente lo que necesitaba.
El problema no era si existen los archivos(siempre estarán y si no, se cae y la comparación sera correcta).

Grax por la ayuda.
-------------------------------------------------------------------------------------------------------------------------

Seguí dándole vuelta al tema y conseguí lo siguiente:

APP_HOME=/usuarios/exgesccr/lancorp/Shell;
acu=`$APP_HOME/LC_acumulacion $APP_HOME/LC_acumulacion.xml`;

echo "--------- Resultado Acu--------------------------------------------------------------------------------------"
echo $acu;
echo "--------- Fin Resultado Acu----------------------------------------------------------------------------------"

if echo $acu | grep "Cierre Archivos de Log"; then
echo "done"
else
echo "fail"
fi

Que funciona bien para lo que necesito. (No devolvió el int que estaba declarado en el fuente C++, sino que devolvió lo que imprime ese fuente)
Solo me queda si puedo optimizar eso, o lograr capturar el valor que devuelve el fuente(no se si se puede).

Si alguien me ayuda, o lo logro alguna mejora a lo que ya tengo, lo pongo acá y edito el asunto como solucionado

Saludos
Distribucion utilizada: la que mas use fue mandrake 9.2
Ahora en el pc de la casa(casi no lo uso), tengo ubuntu 10 con windows 7 ultimate
En el trabajo, windows XP y ubuntu 10

Avatar de Usuario
maiku
Moderador
Moderador
Mensajes: 1531
Registrado: Jue Abr 19, 2007 7:00 am
Ubicación: Cojutepeque, El Salvador C. A.

Re: Problema con ejecucion de procesos en Shell

Mensaje por maiku »

Jochelo escribió: (No devolvió el int que estaba declarado en el fuente C++, sino que devolvió lo que imprime ese fuente)
hola, ahora veo que interpreté mal y no noté que refería a ejecutar el binario y obtener un resultado. No sé si existe una mejor práctica, pero cuando yo necesitaba un resultado a partir de un binario en C y quería que un script lo leyera, lo escribía el resultado a un archivo/fichero temporal (sí en /tmp/ ) digamos un valor 1 ó 0 similar a este caso y después lo leía y asignaba desde el script.
Grüße...
Maiku

Full linux alchemist!!!

Avatar de Usuario
neurus
Forista Legendario
Forista Legendario
Mensajes: 1829
Registrado: Dom Oct 10, 2004 7:00 am

Re: Problema con ejecucion de procesos en Shell

Mensaje por neurus »

Existe el comando tempfile (en BSD: tmpfile). Pero la idea es básicamente la misma: crea un archivo temporal con lo que señales que debe ir dentro. La diferencia, es que el archivo temporal, en lugar de tener un nombre inteligible, se llama según una cadena de caracteres al azar.

Una segunda diferencia, es que resulta levemente más complejo utilizar tempfile, que crear directamente el archivo temporal.

Responder
  • Temas similares
    Respuestas
    Vistas
    Último mensaje