[SOLUCIONADO] ¿ Cómo encontrar el comando de consola que necesito para mi aplicación ?. - Versión para impresión +- Comunidad Gambas-es (https://gambas-es.org) +-- Foro: Gambas (https://gambas-es.org/forum-3.html) +--- Foro: General (https://gambas-es.org/forum-4.html) +--- Tema: [SOLUCIONADO] ¿ Cómo encontrar el comando de consola que necesito para mi aplicación ?. (/thread-279.html) Páginas:
1
2
|
¿ Cómo encontrar el comando de consola que necesito para mi aplicación ?. - Shell - 17-02-2021 Buenas!. Hace ya tiempo hice una pequeña aplicación que mostraba clones del multi-emulador M.A.M.E. Este emulador tiene la opción desde línea de comandos de devolverte esos valores. Tomando la salida del comando hice una aplicación de ejemplo. El nombre del comando ha ido cambiando con el paso del tiempo. Para distros de 32 se podía llamar "mame32", para las de 64 "mame64"...y como último "mame" para resumir y dejarla como única. En la Mint 20.X el paquete de instalación, el binario de la aplicación es "mame" Tengo algo así para no complicar el código pero lo mejoraré. Código: 'Funciona con mame para una distro de 32 bits Entonces mi idea es encontrar el comando que existe en la distro y usarlo. Si uso el comando "whereis" de bash me da tres respuestas. Código: whereis mame Cita:mame: /etc/mame /usr/games/mame /usr/share/man/man6/mame.6.gz - Donde se encuentra la configuración - El ejecutable - Supongo que el manual, cambios, etc. Como es un juego , lo encontramos en /usr/games...pero podía haberse instalado en /usr/local/bin.../usr/bin/... Imaginar que por alguna circunstancia no se encuentra en los habituales... ¿ Cual creen que debería ser la mejor manera de encontrar el ejecutable o cualquier orden ?. Claro que también tenemos la posibilidad que al ejecutar una orden que no existe instalada en el sistema, nos devuelva algo la consola por la salida de error. Una posible solución puede ser esta: Almacenar toda la salida del comando "whereis" en un array. Descartar lugares y luego preguntar a cada una de estas salidas si el archivo es un binario y usarlo. Saludos RE: ¿ Cómo encontrar el comando de consola que necesito para mi aplicación ? - Shell - 17-02-2021 Comencemos con. ¿ Qué es ?... Código: whatis which Cita:which (1) - Busca una orden Vamos, que busca donde están los ejecutables. ¿ Y ahora usemos las llaves para que nos diga, cuales de los mame's están instalado ? Código: which -a mam{e,e32,e64} (La "e" es necesaria en todas las posibilidades a buscar). Es que si solo escribo Código: which -a mame{32,64} Buscaría mame32 y mame64, cosas que no están instalada y así voy a lo seguro. La opción "-a" es para que me diga en todos los sitios que pueden estar, por si hay más de uno de cada uno. Buscará mame, mame32 y mame64. Mostrando la única salida: Cita:/usr/games/mame Debería ser un mensaje en parte para el área de Linux. Oh, más de uno necesitamos hacer un curso de bash. Saludos RE: ¿ Cómo encontrar el comando de consola que necesito para mi aplicación ? - jguardon - 18-02-2021 Es que no me queda claro si estás hablando de Mame o de encontrar la ruta de un ejecutable. Basta con usar which <ejecutable> para encontrarlo. Si no hay salida, es que no existe o no está instalado. Saludos RE: ¿ Cómo encontrar el comando de consola que necesito para mi aplicación ? - Shell - 18-02-2021 (18-02-2021, 16:00)jguardon escribió: Basta con usar which <ejecutable> para encontrarlo. Si no hay salida, es que no existe o no está instalado. Hola Jesús. En este caso no recordaba el comando which y se trataba de encontrar donde estaba instalado el emulador mame. Me he encontrado un problema que no he podido resolver. No sé hasta donde llega la potencia de la instrucción "Shell" o "Exec" en Gambas. Por ejemplo, no me funciona en Gambas algo como esto. El comodín llave y su manera de expandir, llevarlo a una instrucción creada en Gambas con Shell. Código: Shell "which mam{e,e32,e64}" Que no obtengo salida. Si lo logre haciendo que la instrucción Shell ejecute which con cada una de las posibiliaddes hasta encontrar que alguna devuelva un valor. Código: Public Sub SimularWhich() Puede que haya ciertas limitaciones o no conozca la forma de hacerlo correctamente con la instrucción Shell de Gambas. Saludos[/i] RE: ¿ Cómo encontrar el comando de consola que necesito para mi aplicación ? - tincho - 19-02-2021 Tendrías que hacer así: Código: Public Sub Form_Open() RE: ¿ Cómo encontrar el comando de consola que necesito para mi aplicación ? - Shell - 22-02-2021 Hola Tincho. Con esa modificación obtendría la salida estándar y la de errores por la consola. Realmente lo que intento y parece que Gambas no comprende. ( Lo entenderá a su manera ). Es algo como esto: Código: Shell "which " & "mam{e,e32,e64}" & "2>&1" To cadena La salida es nula. Hay una línea vacía solo. Puede que la instrucción shell de Gambas no sea capaz de entender eso. A lo mejor no sabe si son cadenas de texto, si son variables. Desde luego las comillas delimitan lo que es .Un texto. Y como funcionaba por eso lo de crear un bucle con las posibles opciones y ver cual tiene salida. Shell de Gambas no tiene por que tener toda la potencia del bash. Y como programadores de Gambas siempre buscaremos la posibilidad de hacerlo en Gambas antes de hacer uso de comandos externos. Saludos RE: ¿ Cómo encontrar el comando de consola que necesito para mi aplicación ? - tincho - 22-02-2021 (22-02-2021, 17:43)Shell escribió: Shell "which " & "mam{e,e32,e64}" & "2>&1" To cadena Te falta un espacio entre } y 2 Código: Shell "which " & "mam{e,e32,e64}" & " 2>&1" To cadena RE: ¿ Cómo encontrar el comando de consola que necesito para mi aplicación ? - Shell - 22-02-2021 (22-02-2021, 17:58)tincho escribió: Te falta un espacio entre } y 2 Efectivamente, pero he logrado el mismo resultado. Como ves no hay un cambio. Aunque es cierto que al principio estaba junto el } y el 2. Aunque es un fallo muy típico lo solucioné nada más ver tu primera respuesta. Saludos y muchas gracias por tu interés. RE: ¿ Cómo encontrar el comando de consola que necesito para mi aplicación ? - Shell - 24-02-2021 Hola!. Parece que tengo que decirle al comando Shell de Gambas que "shell" del sistema quiero ejecutar. Por defecto es: " Código: /bin/sh Así que: Código: Public Sub Ejemplo2() Y entonces la salida será en este sistema: Cita:/usr/games/mame System.Shell Saludos RE: ¿ Cómo encontrar el comando de consola que necesito para mi aplicación ?. - jguardon - 24-02-2021 (24-02-2021, 01:20)Shell escribió: Parece que tengo que decirle al comando Shell de Gambas que "shell" del sistema quiero ejecutar. Por defecto es: " Eso plantea el problema de que si distribuyes tu aplicación, no vas a saber qué shell tienen los diferentes usuarios. Entonces tu aplicación podría fallar si especificas un shell que no exista en esa máquina. Se me ocurre que mediante alguna variable de entorno se puede averiguar y actuar en consecuencia, escogiendo entre varias opciones en el código. Imagina tener que averiguar entre:
Pero es muy sencillo, sólo tienes que preguntar qué contiene la variable de entorno $SHELL [code] y la salida del comando te dirá qué shell se está ejecutando en tu sistema. Saludos |