elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Tutorial básico de Quickjs


+  Foro de elhacker.net
|-+  Programación
| |-+  Scripting
| | |-+  [Bash] Abrir un proceso o otro script bash en una nueva shell
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [Bash] Abrir un proceso o otro script bash en una nueva shell  (Leído 12,193 veces)
nhaalclkiemr


Desconectado Desconectado

Mensajes: 1.678


Máximo exponente 9DB9F1AEED2FADBDE 997BBE20FEDA92


Ver Perfil WWW
[Bash] Abrir un proceso o otro script bash en una nueva shell
« en: 10 Agosto 2011, 23:11 pm »

Creo que el titulo lo aclara bastante. Estoy haciendo un bash en el que necesito abrir un proceso de consola (o otro script bash) en otra shell (o otra pestaña) mientras el bash original continua ejecutandose (no espera a la finalización de la otra shell).

Llamar a un proceso desde la shell mientras se sigue ejecutando el script es bastante facil utilizando el símbolo &. Ejemplo:

Código
  1. ...
  2. ./programauno -param1 -param2 &
  3. ./programados -param1 asdasd &
  4. ./programatres -param1 -param2 -param3 &
  5. ...

De esta manera el script iria ejecutando los programas paralelamente mientras continua. El problema es que esos programas son por consola y necesitan interacción con el usuario, muestran estadisticas, etc... por lo tanto necesito que cada uno de esos procesos se ejecute en una nueva shell. Tal y como lo puse todos los programas se ejecutarian en la misma consola y se mostraría un lio de cosas.

Investigando por la red, solo ponían una manera de hacer esto, y era llamando a la shell especifica (XTerm, gnome-terminal, etc...) con parámetros que ejecutaran directamente los programas que queremos. Esto funciona bien, pero tiene el problema de que el script solo funcionaria para determinadas shell y no para todas. Un ejemplo de esto con gnome-terminal sería:

Código
  1. ...
  2. gnome-terminal -x mibashuno.sh &
  3. gnome-terminal -x mibashdos.sh &
  4. ...


Con esto todo dicho, ahí van mis preguntas:

-¿Existe algún comando o alguna llamada que sirva para todas las shell y que permita ejecutar cada uno de los procesos en una shell diferente? (en un batch de windows por ejemplo se usa start)

-Si esto no es posible, ¿sabeis si existe alguna shell por defecto que venga instalada en todos o la mayoría de los Linux? Yo he visto por ejemplo que la XTerm está en bastantes SO de Linux, pero conozco pocas distros diferentes para saber si está en todos.

-Si tampoco existe una "shell universal" ¿Cuales son las shell más populares que vienen en Linux? De esta manera podría comprobar mediante el script si alguna de las shell de mi lista está instalada en el SO, y de estarlo ejecutar esa con sus propios parámetros. Actualmente yo solo conozco la gnome-terminal y el XTerm.

-Cualquier otra sugerencia, cuestión o ayuda que creais que puede ayudarme a solucionar el problema decidmela.


Esto es todo, a ver si alguien puede ayudarme.

Saludos ;)


En línea

StasFodidoCrypter 1.0 - 100% (old)
StasFodidoCrypter 2.0 - 85% (deserted)
Fire AV/FW-Killer - 97% (deserted)
R-WlanXDecrypter 1.0- 100%
leogtz
. . .. ... ..... ........ ............. .....................
Colaborador
***
Desconectado Desconectado

Mensajes: 3.069


/^$/


Ver Perfil WWW
Re: [Bash] Abrir un proceso o otro script bash en una nueva shell
« Respuesta #1 en: 11 Agosto 2011, 00:14 am »

¿Por qué no haces una función que compruebe si determinados emuladores de terminal están instalados?

Ejemplo:
Código
  1. #!/bin/bash
  2. for emulador in xterm gnome-terminal lxterminal urxvt konsole tilda yakuake guake sakura
  3. do
  4. which $emulador &> /dev/null && {
  5. echo -e "Emulador instalado [ $emulador ], ruta [ $(which $emulador) ]";
  6. }
  7. done

Mira, este pedazo de código lo vi hace días y supongo que funciona:

Código
  1. TERMINAL=$(cat ~/.pacmangui/terminal)
  2.  
  3. case "$TERMINAL" in
  4. Gnome-terminal)
  5. USETERM="gnome-terminal -x"
  6. ;;
  7. Konsole)
  8. USETERM="konsole -e"
  9. ;;
  10. Xfce-terminal)
  11. USETERM="xfce4-terminal -x"
  12. ;;
  13. Xterm)
  14. USETERM="xterm -e"
  15. ;;
  16. esac
  17.  

Saludos.


« Última modificación: 11 Agosto 2011, 04:32 am por Leo Gutiérrez. » En línea

Código
  1. (( 1 / 0 )) &> /dev/null || {
  2. echo -e "stderrrrrrrrrrrrrrrrrrr";
  3. }
  4.  
http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com
nhaalclkiemr


Desconectado Desconectado

Mensajes: 1.678


Máximo exponente 9DB9F1AEED2FADBDE 997BBE20FEDA92


Ver Perfil WWW
Re: [Bash] Abrir un proceso o otro script bash en una nueva shell
« Respuesta #2 en: 27 Agosto 2011, 06:23 am »

Queria evitar tener que comprobar que emuladores estan instalados para luego ejecutar segundo que emulador diferentes parametros. Pero por lo que puedo ver no existe una manera "universal" de hacerlo, asi que tendré que hacerlo así.

No conozco demasiados emuladores, pero los que tu listas deberían ser suficientes creo yo. En Wikipedia he encontrado una buena lista de emuladores:

http://en.wikipedia.org/wiki/List_of_terminal_emulators#X_Window_Terminals

Yo seleccioné estos y creo que llegarán de sobra:

Código:
konsole
gnome-terminal
lxterminal
xfce4-terminal
xterm
urxvt
mrxvt
aterm
eterm
rxvt
yakuake
tilda
kuake
guake
sakura

Ahora solo tengo que comprobar mediante la página man o mediante --help cuales son los parámetros de cada uno de los terminales para ejecutar un comando nada más abrirse. Ya he comprobado la mayoría, en algunos casos es -x y en la mayoría -e. No es muy dificil, solo me quedan comprobar los últimos.

Cuando tenga un código bash coherente lo pondré aqui para que pueda servir de ayuda a otras personas.

Muchas gracias por tu ayuda me han servido de mucho tus códigos.

Saludos ;)
En línea

StasFodidoCrypter 1.0 - 100% (old)
StasFodidoCrypter 2.0 - 85% (deserted)
Fire AV/FW-Killer - 97% (deserted)
R-WlanXDecrypter 1.0- 100%
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines