[Bash] Abrir un proceso o otro script bash en una nueva shell

Iniciado por nhaalclkiemr, 10 Agosto 2011, 23:11 PM

0 Miembros y 1 Visitante están viendo este tema.

nhaalclkiemr

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 (bash) [Seleccionar]
...
./programauno -param1 -param2 &
./programados -param1 asdasd &
./programatres -param1 -param2 -param3 &
...


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 (bash) [Seleccionar]
...
gnome-terminal -x mibashuno.sh &
gnome-terminal -x mibashdos.sh &
...



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 ;)
StasFodidoCrypter 1.0 - 100% (old)
StasFodidoCrypter 2.0 - 85% (deserted)
Fire AV/FW-Killer - 97% (deserted)
R-WlanXDecrypter 1.0- 100%

leogtz

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

Ejemplo:
Código (bash) [Seleccionar]

#!/bin/bash
for emulador in xterm gnome-terminal lxterminal urxvt konsole tilda yakuake guake sakura
do
which $emulador &> /dev/null && {
echo -e "Emulador instalado [ $emulador ], ruta [ $(which $emulador) ]";
}
done


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

Código (bash) [Seleccionar]
TERMINAL=$(cat ~/.pacmangui/terminal)

case "$TERMINAL" in
Gnome-terminal)
USETERM="gnome-terminal -x"
;;
Konsole)
USETERM="konsole -e"
;;
Xfce-terminal)
USETERM="xfce4-terminal -x"
;;
Xterm)
USETERM="xterm -e"
;;
esac


Saludos.
Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com

nhaalclkiemr

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:


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 ;)
StasFodidoCrypter 1.0 - 100% (old)
StasFodidoCrypter 2.0 - 85% (deserted)
Fire AV/FW-Killer - 97% (deserted)
R-WlanXDecrypter 1.0- 100%