Re: Pregunta tonta de Bash [SOLUCIONADO]

2006-11-11 Por tema Iñigo Tejedor Arrondo
Saludos lista de debian, cuanto tiempo sin escribir aquí.

Otra posible solución:

[ `which top` ]  echo top instalado || echo top no instalado

Aupa

-- 

,-,
| Iñigo Tejedor Arrondohttp://navarrux.org   inigo(a)navarrux.org |
|-|
| |
| Debian - The universal operative system.|
| |
| You can choose, get the freedom, get the power, apt-get in to it. |
| |
·-·


-- 
To UNSUBSCRIBE, email to [EMAIL PROTECTED]
with a subject of unsubscribe. Trouble? Contact [EMAIL PROTECTED]



Re: Pregunta tonta de Bash

2006-11-10 Por tema Ismael Valladolid Torres
Guimi escribe:
 Iñaki escribió:
 Hola, sé que debe ser una tontería pero no logro dar con la solución:
 
 if [ $(which top) ] ; then
   echo Paquete top instalado
 else
   echo Paquete top no instalado
 fi
 
 
 Perfecto, pero yo quiero que de una manera sencilla hacer algo como:
 
 
 if [ !$(which top) ] ; then
   echo top no instalado ;
 fi
 
 Pero obviamente no sirve (no existe) eso de poner un ! delante de la 
 condición.
 
 Si sirve, pero te falta un espacio:
 if [ ! $(which top) ]
 then
   echo No
 fi
 
 La verdad es que los condicionales en Bash siempre han sido un infierno 
 para mí. ¿Alguien me ayuda a poner esa última opción correctamente pero 
 sin aumentar el número de líneas?
 
 man test ;-)

Yo, después de algunos años de bashes y whiches, he acabado
descubriendo que la forma más portable sería ésta:

if [ -x `which top` ]; then
   echo puedes ejecutar top
fi

Esto te sirve tanto en otros sistemas UNIX (como HP-UX) donde which
tiene la gracia de devolver el estado al revés (0 si existe, 1 si no
existe). También te sirve en sistemas donde el comando estaría en el
path pero tu usuario no tendría permisos para ejecutarlo.

Si te preocupa el número de líneas:

[ -x `which top` ];  echo puedes ejecutar top

Y no existen las preguntas tontas, existen las respuestas que se pasan
de listas.

Un saludo, Ismael
-- 
Ismael Valladolid Torres Il est vain de pleurer sur l'esprit, il suffit
  de travailler pour lui. Albert Camus
http://digitrazos.info/
http://lamediahostia.blogspot.com/OpenPGP key ID: 0xDE721AF4
http://www.hispasonic.com/foro73.html  Jabber ID: [EMAIL PROTECTED]


-- 
To UNSUBSCRIBE, email to [EMAIL PROTECTED]
with a subject of unsubscribe. Trouble? Contact [EMAIL PROTECTED]



Re: Pregunta tonta de Bash

2006-11-10 Por tema Ricardo Frydman Eureka!
-BEGIN PGP SIGNED MESSAGE-
Hash: SHA1

Ismael Valladolid Torres wrote:
 Guimi escribe:
 Iñaki escribió:
 Hola, sé que debe ser una tontería pero no logro dar con la solución:

 if [ $(which top) ] ; then
  echo Paquete top instalado
 else
  echo Paquete top no instalado
 fi


 Perfecto, pero yo quiero que de una manera sencilla hacer algo como:


 if [ !$(which top) ] ; then
  echo top no instalado ;
 fi

 Pero obviamente no sirve (no existe) eso de poner un ! delante de la 
 condición.
 Si sirve, pero te falta un espacio:
 if [ ! $(which top) ]
 then
   echo No
 fi

 La verdad es que los condicionales en Bash siempre han sido un infierno 
 para mí. ¿Alguien me ayuda a poner esa última opción correctamente pero 
 sin aumentar el número de líneas?
 man test ;-)
 
 Yo, después de algunos años de bashes y whiches, he acabado
 descubriendo que la forma más portable sería ésta:
 
 if [ -x `which top` ]; then
echo puedes ejecutar top
 fi
 
 Esto te sirve tanto en otros sistemas UNIX (como HP-UX) donde which
 tiene la gracia de devolver el estado al revés (0 si existe, 1 si no
 existe). También te sirve en sistemas donde el comando estaría en el
 path pero tu usuario no tendría permisos para ejecutarlo.
 
 Si te preocupa el número de líneas:
 
 [ -x `which top` ];  echo puedes ejecutar top
 ^^
Solo una pequeña aclaracion a tan magistrales correos:

[EMAIL PROTECTED]:~ $ [ `which top` ];   echo top ta
bash: syntax error near unexpected token `'
[EMAIL PROTECTED]:~ $ [ `which top` ]   echo top ta
top ta
[EMAIL PROTECTED]:~ $ uname -a
Linux kebek 2.6.12-10-686 #1 Fri Sep 15 16:37:09 UTC 2006 i686 GNU/Linux
[EMAIL PROTECTED]:~ $

Esta noche lo pruebo en AIX, Solaris y HP-UX y les cuento ;)

 
 Y no existen las preguntas tontas, existen las respuestas que se pasan
 de listas.

Si que existen! Ahi va una:
Adan  tenía ombligo?
:P

 
 Un saludo, Ismael


- --
Ricardo A.Frydman
Administrador de Sistemas Unix
http://eureka-linux.com.ar
-BEGIN PGP SIGNATURE-
Version: GnuPG v1.4.1 (GNU/Linux)

iD8DBQFFVIVCkw12RhFuGy4RAuIWAJ931vfPBMj7ta1TlqWnAuzhlE+Z8ACfTWDB
RK1VID6GbaMRZwwY0dJL5rA=
=CmSE
-END PGP SIGNATURE-



Re: Pregunta tonta de Bash

2006-11-10 Por tema César Rincón
Ismael Valladolid Torres wrote:
 Esto te sirve tanto en otros sistemas UNIX (como HP-UX) donde which
 tiene la gracia de devolver el estado al revés (0 si existe, 1 si no
 existe). También te sirve en sistemas donde el comando estaría en el
 path pero tu usuario no tendría permisos para ejecutarlo.

Es bueno saber eso, no tenía idea, muchas gracias por esa información.
Precisamente estos días tengo la desventura de estar desarrollando
software para HP-UX.  Experimentando con esto, veo que el problema es
más bien que which no reporta como un error el caso en que no encuentra
el comando en la ruta:

$ uname -svr
HP-UX B.11.11 U
$ which ls /dev/null; echo $?
0
$ which inexistente /dev/null; echo $?
0

Peor aún, cuando no encuentra el comando, imprime una letanía ...

$ which inexistente
no inexistente in /usr/bin /usr/ccs/bin /usr/contrib/bin /opt/mx/bin
/opt/hparray/bin /opt/nettladm/bin /opt/upgrade/bin /opt/fcms/bin
[etc, etc]

... pero lo hace ¡en la salida *estándar*, no en la de error!  Luego, no
puedes comprobar si which falló asumiendo que devuelve una cadena vacía.
Tienes que usar test -x, como bien sugieres.

Estúpido sistema operativo.  Y pensar que te lo venden.
Y mejor no empiezo con su compilador senil, y la fiesta que es instalar
un GCC reciente, y su getaddrinfo() torcido, y...

En fin.  Nomás por completez:

$ uname -svr
AIX 3 5
$ which ls /dev/null; echo $?
0
$ which inexistente /dev/null; echo $?
1

Cual debería ser.  No tengo un Solaris a la mano, pero realmente no
espero ninguna desviación de GNU y AIX.  Es HP-UX el que es... especial.

 Y no existen las preguntas tontas, existen las respuestas que se pasan
 de listas.

Ups.  Acuso recibo de pedrada en parietal izquierdo.  Ya me callo :)

-- 
César Rincón
Enlaces Tecnológicos
Guadalajara, México


-- 
To UNSUBSCRIBE, email to [EMAIL PROTECTED]
with a subject of unsubscribe. Trouble? Contact [EMAIL PROTECTED]



Re: Pregunta tonta de Bash

2006-11-09 Por tema Guimi

Iñaki escribió:

Hola, sé que debe ser una tontería pero no logro dar con la solución:

if [ $(which top) ] ; then
  echo Paquete top instalado
else
  echo Paquete top no instalado
fi


Perfecto, pero yo quiero que de una manera sencilla hacer algo como:


if [ !$(which top) ] ; then
  echo top no instalado ;
fi

Pero obviamente no sirve (no existe) eso de poner un ! delante de la 
condición.


Si sirve, pero te falta un espacio:
if [ ! $(which top) ]
then
  echo No
fi

La verdad es que los condicionales en Bash siempre han sido un infierno para 
mí. ¿Alguien me ayuda a poner esa última opción correctamente pero sin 
aumentar el número de líneas?


man test ;-)


Gracias.


De nada

Saludos
Güimi
http://guimi.net
--
Por el bien de todos respetemos las normas de la lista:
http://wiki.debian.org/NormasLista


--
To UNSUBSCRIBE, email to [EMAIL PROTECTED]
with a subject of unsubscribe. Trouble? Contact [EMAIL PROTECTED]



Re: Pregunta tonta de Bash

2006-11-09 Por tema Iñaki
El Jueves, 9 de Noviembre de 2006 10:27, Guimi escribió:
 Iñaki escribió:
  Hola, sé que debe ser una tontería pero no logro dar con la solución:
 
  if [ $(which top) ] ; then
echo Paquete top instalado
  else
echo Paquete top no instalado
  fi
 
 
  Perfecto, pero yo quiero que de una manera sencilla hacer algo como:
 
 
  if [ !$(which top) ] ; then
echo top no instalado ;
  fi
 
  Pero obviamente no sirve (no existe) eso de poner un ! delante de la
  condición.

 Si sirve, pero te falta un espacio:
 if [ ! $(which top) ]
 then
echo No
 fi

Vaya, gracias ;)



  La verdad es que los condicionales en Bash siempre han sido un infierno
  para mí. ¿Alguien me ayuda a poner esa última opción correctamente pero
  sin aumentar el número de líneas?

 man test ;-)

A ello voy :)


-- 
Iñaki

Por el bien de todos respetemos las normas de la lista:
http://wiki.debian.org/NormasLista



Pregunta tonta de Bash

2006-11-08 Por tema Iñaki
Hola, sé que debe ser una tontería pero no logro dar con la solución:

if [ $(which top) ] ; then
  echo Paquete top instalado
else
  echo Paquete top no instalado
fi


Perfecto, pero yo quiero que de una manera sencilla hacer algo como:


if [ !$(which top) ] ; then
  echo top no instalado ;
fi

Pero obviamente no sirve (no existe) eso de poner un ! delante de la 
condición.

La verdad es que los condicionales en Bash siempre han sido un infierno para 
mí. ¿Alguien me ayuda a poner esa última opción correctamente pero sin 
aumentar el número de líneas?


Gracias.



-- 
Iñaki

Por el bien de todos respetemos las normas de la lista:
http://wiki.debian.org/NormasLista



RE: Pregunta tonta de Bash

2006-11-08 Por tema Erik Hurtado Sepulveda


 -Mensaje original-
 De: Iñaki [mailto:[EMAIL PROTECTED]
 Enviado el: Miércoles, 08 de Noviembre de 2006 17:40
 Para: debian-user-spanish@lists.debian.org
 Asunto: Pregunta tonta de Bash
 
 Hola, sé que debe ser una tontería pero no logro dar con la solución:
 
 if [ $(which top) ] ; then
   echo Paquete top instalado
 else
   echo Paquete top no instalado
 fi
 
 
 Perfecto, pero yo quiero que de una manera sencilla hacer algo como:
 
 
 if [ !$(which top) ] ; then
   echo top no instalado ;
 fi
 
Prueba con 
if [ eval(!$(which top)) ] ; then
   echo top no instalado ;
fi

si mal no recuerdo esa es la sintaxis correcto(es de memoria)

 Pero obviamente no sirve (no existe) eso de poner un ! delante de la
 condición.
 
 La verdad es que los condicionales en Bash siempre han sido un infierno
 para
 mí. ¿Alguien me ayuda a poner esa última opción correctamente pero sin
 aumentar el número de líneas?
 
 
 Gracias.
 
 
 
 --
 Iñaki
 
 Por el bien de todos respetemos las normas de la lista:
 http://wiki.debian.org/NormasLista



Re: Pregunta tonta de Bash

2006-11-08 Por tema Carlos Zuniga

On 11/8/06, Erik Hurtado Sepulveda [EMAIL PROTECTED] wrote:



 -Mensaje original-
 De: Iñaki [mailto:[EMAIL PROTECTED]
 Enviado el: Miércoles, 08 de Noviembre de 2006 17:40
 Para: debian-user-spanish@lists.debian.org
 Asunto: Pregunta tonta de Bash

 Hola, sé que debe ser una tontería pero no logro dar con la solución:

 if [ $(which top) ] ; then
   echo Paquete top instalado
 else
   echo Paquete top no instalado
 fi


 Perfecto, pero yo quiero que de una manera sencilla hacer algo como:


 if [ !$(which top) ] ; then
   echo top no instalado ;
 fi

Prueba con
if [ eval(!$(which top)) ] ; then
   echo top no instalado ;
fi

si mal no recuerdo esa es la sintaxis correcto(es de memoria)

 Pero obviamente no sirve (no existe) eso de poner un ! delante de la
 condición.

 La verdad es que los condicionales en Bash siempre han sido un infierno
 para
 mí. ¿Alguien me ayuda a poner esa última opción correctamente pero sin
 aumentar el número de líneas?


 Gracias.



 --
 Iñaki

 Por el bien de todos respetemos las normas de la lista:
 http://wiki.debian.org/NormasLista




Prueba con este:

which top 1/dev/null 2/dev/null
if test $? = 1
then
   echo Error: The application 'screen' cannot be found in the system
fi

Al menos no te enrollas con los parentesis :P
--
(!c) 2006 - カルロス
Linux Registered User # 386081
A menudo unas pocas horas de Prueba y error podrán ahorrarte minutos
de leer manuales.


Re: Pregunta tonta de Bash [SOLUCIONADO]

2006-11-08 Por tema Iñaki
El Miércoles, 8 de Noviembre de 2006 21:58, Carlos Zuniga escribió:
 Prueba con este:

 which top 1/dev/null 2/dev/null
 if test $? = 1
 then
 echo Error: The application 'screen' cannot be found in the system
 fi

 Al menos no te enrollas con los parentesis :P


Gracias a ambos.

PD: Mi problema es que me estoy mal acostumbrando con la maravillosa 
programación en Ruby, y hacer un if en Bash me empieza a resultar un 
infierno  ;)




-- 
Iñaki

Por el bien de todos respetemos las normas de la lista:
http://wiki.debian.org/NormasLista



Re: Pregunta tonta de Bash

2006-11-08 Por tema Marcel Rodolfo Sanchez Gongora
El mié, 08-11-2006 a las 21:40 +0100, Iñaki escribió:
 Hola, sé que debe ser una tontería pero no logro dar con la solución:
 
 if [ $(which top) ] ; then
   echo Paquete top instalado
 else
   echo Paquete top no instalado
 fi
 
 
 Perfecto, pero yo quiero que de una manera sencilla hacer algo como:
 
 
 if [ !$(which top) ] ; then
   echo top no instalado ;
 fi
 
 Pero obviamente no sirve (no existe) eso de poner un ! delante de la 
 condición.
 
 La verdad es que los condicionales en Bash siempre han sido un infierno para 
 mí. ¿Alguien me ayuda a poner esa última opción correctamente pero sin 
 aumentar el número de líneas?
 

Iñaki: 
puedes trata el resutado (which top) como una cadena y manipúlalo como
tal, se asume que si la cadena te da valor null no está instalado.

saludos
 
-- 
Marcel Sánchez Góngora 
Debian Etch GNU/Linux 
Linux User #382151 
Est. III año 
Universidad de las Ciencias Informáticas 
Lo esencial es invisible para los ojos... 


signature.asc
Description: Esta parte del mensaje está firmada	digitalmente


Re: Pregunta tonta de Bash [SOLUCIONADO]

2006-11-08 Por tema César Rincón
Iñaki wrote:
 PD: Mi problema es que me estoy mal acostumbrando con la maravillosa 
 programación en Ruby, y hacer un if en Bash me empieza a resultar un 
 infierno  ;)

Je.  Ruby es la berraquera, en efecto... ¿qué les costaba ponerle un
unless a Bash? :)

Pero Bash no es tan malo... y de hecho es bastante consistente.  Creo
que parte del problema es que estás ignorando un detalle importante:
esos corchetes '[', ']' que pones alrededor de la condición, realmente
no son parte de la sintaxis de if.

El '[' es de hecho un comando.  Es un sinónimo para el comando test;
ve su manual: test(1).  El ']' final es ignorado; se te deja usarlo para
que la condición no se vea fea.

Cuando escribes

   if [ false ] ; then echo verdadero; fi

le estás pidiendo a 'if' que evalúe el comando 'test false', y ejecute
las instrucciones tras el 'then' si 'test false' devuelve cero.

Y la consola responde con verdadero.  Eso es porque la evaluación de

  test false

es verdadera (e.g. devuelve 0), lo mismo que test true, test x, test 0,
etc.:

  if [ true ] ; then echo cierto; fi
  -- cierto
  if [ false ] ; then echo cierto; fi
  -- cierto

test no intenta ejecutar sus parámetros; asume que son cadenas.  Llamar
a test con un parámetro produce verdadero siempre que el parámetro no
sea la cadena vacía (ve test(1))

'if' ejecuta lo que pongas en el then si la lista que le das a
ejecutar como condición devuelve 0 (ve en el manual bash(1) la
definición de una lista: es muy esclarecedora).

Lo que pides, pues, se puede poner como

  if ! which top /dev/null ; then
echo no hay top!
exit 1
  fi

Nota la ausencia de '['.  Nota también el espacio entre el '!' y
'which', que es importante.

O claro, se puede hacer también de todas las maneras que la gente ha
sugerido :-)

-- 
César Rincón
Enlaces Tecnológicos
Guadalajara, México


-- 
To UNSUBSCRIBE, email to [EMAIL PROTECTED]
with a subject of unsubscribe. Trouble? Contact [EMAIL PROTECTED]



Re: Pregunta tonta de Bash [SOLUCIONADO]

2006-11-08 Por tema Iñaki
El Miércoles, 8 de Noviembre de 2006 23:59, César Rincón escribió:
 Iñaki wrote:
  PD: Mi problema es que me estoy mal acostumbrando con la maravillosa
  programación en Ruby, y hacer un if en Bash me empieza a resultar un
  infierno  ;)

 Je.  Ruby es la berraquera, en efecto... ¿qué les costaba ponerle un
 unless a Bash? :)

 Pero Bash no es tan malo... y de hecho es bastante consistente.  Creo
 que parte del problema es que estás ignorando un detalle importante:
 esos corchetes '[', ']' que pones alrededor de la condición, realmente
 no son parte de la sintaxis de if.

 El '[' es de hecho un comando.  Es un sinónimo para el comando test;
 ve su manual: test(1).  El ']' final es ignorado; se te deja usarlo para
 que la condición no se vea fea.

 Cuando escribes

if [ false ] ; then echo verdadero; fi

 le estás pidiendo a 'if' que evalúe el comando 'test false', y ejecute
 las instrucciones tras el 'then' si 'test false' devuelve cero.

 Y la consola responde con verdadero.  Eso es porque la evaluación de

   test false

 es verdadera (e.g. devuelve 0), lo mismo que test true, test x, test 0,
 etc.:

   if [ true ] ; then echo cierto; fi
   -- cierto
   if [ false ] ; then echo cierto; fi
   -- cierto

 test no intenta ejecutar sus parámetros; asume que son cadenas.  Llamar
 a test con un parámetro produce verdadero siempre que el parámetro no
 sea la cadena vacía (ve test(1))

 'if' ejecuta lo que pongas en el then si la lista que le das a
 ejecutar como condición devuelve 0 (ve en el manual bash(1) la
 definición de una lista: es muy esclarecedora).

 Lo que pides, pues, se puede poner como

   if ! which top /dev/null ; then
 echo no hay top!
 exit 1
   fi

 Nota la ausencia de '['.  Nota también el espacio entre el '!' y
 'which', que es importante.

 O claro, se puede hacer también de todas las maneras que la gente ha
 sugerido :-)


Impresionante explicación. Esta va directa a mi disco duro ;)

Pues no, no tenía ni idea del significado de [ en bash, pensaba que era parte 
de la sintaxis (obligatoriamente).

Mil gracias de nuevo por la perfecta explicación. Saludos.






-- 
Iñaki

Por el bien de todos respetemos las normas de la lista:
http://wiki.debian.org/NormasLista