Reglamento general de los foros   •   FAQ   •   Buscar en el foro •  Registrarse | Iniciar sesión 



Foros Linux » Desarrollo » Programación


Nuevo tema Responder al tema
 [ 5 mensajes ] 
Patrocinadores

Autor
Buscar:
Mensaje

Desconectado
Forista Nuevo
Forista Nuevo
Avatar de Usuario

Registrado: Mar Dic 13, 2011 7:29 am
Mensajes: 9
Ubicación: /HOME

Nota Publicado: Mar Dic 13, 2011 7:42 am 
Arriba  
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

 Perfil Email  

Desconectado
Moderador
Moderador
Avatar de Usuario

Registrado: Mié Abr 18, 2007 11:00 pm
Mensajes: 1209
Ubicación: Cojutepeque, El Salvador C. A.

Nota Publicado: Mar Dic 13, 2011 10:24 am 
Arriba  
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:
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!!!

 Perfil WWW  

Desconectado
Forista Nuevo
Forista Nuevo
Avatar de Usuario

Registrado: Mar Dic 13, 2011 7:29 am
Mensajes: 9
Ubicación: /HOME

Nota Publicado: Mar Dic 13, 2011 12:28 pm 
Arriba  
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:
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

 Perfil Email  

Desconectado
Moderador
Moderador
Avatar de Usuario

Registrado: Mié Abr 18, 2007 11:00 pm
Mensajes: 1209
Ubicación: Cojutepeque, El Salvador C. A.

Nota Publicado: Mar Dic 13, 2011 4:33 pm 
Arriba  
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!!!

 Perfil WWW  

Desconectado
Forista Distinguido
Forista Distinguido
Avatar de Usuario

Registrado: Sab Oct 09, 2004 11:00 pm
Mensajes: 1299

Nota Publicado: Mié Dic 14, 2011 1:37 am 
Arriba  
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.

 Perfil  
Mostrar mensajes previos:  Ordenar por  
 [ 5 mensajes ] 
Nuevo tema Responder al tema

Saltar a:  


¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 3 invitados

No puede abrir nuevos temas en este Foro
No puede responder a temas en este Foro
No puede editar sus mensajes en este Foro
No puede borrar sus mensajes en este Foro
No puede enviar adjuntos en este Foro

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group :: Style based on FI Subice by phpBBservice.nl :: Todos los horarios son UTC - 6 horas
Traducción al español por Huan Manwë
phpBB SEO