Re: Pregunta tonta de Bash [SOLUCIONADO]
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
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
-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
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
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
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
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
-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
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]
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
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]
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]
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