Abrir terminal con múltiples pestañas y ejecutar la aplicación

16

Soy nuevo en las secuencias de comandos de shell de Linux. Quiero escribir un script de shell que abrirá la terminal con múltiples pestañas; debe ejecutar la aplicación de cliente rtsp en cada pestaña.

Para esto, he pasado por una pregunta aquí en este foro e intenté codificar como se indica a continuación,

tab="--tab-with-profile=Default -e "
cmd="java RunRTSPClient"
for i in 1 2 3 4 5
   do
#   
   foo="$foo $tab $cmd"         
   done
gnome-terminal $foo
exit 0

Esto se está ejecutando y abre la ventana de terminal con pestañas, pero de repente se cerrará. No recibo ningún error.

usuario172001
fuente

Respuestas:

13

Use esta variante del script para hacer lo que quiera:

#!/bin/bash

tab="--tab-with-profile=Default"
cmd="bash -c 'java RunRTSPClient';bash"
foo=""

for i in 1 2 3 4 5; do
      foo+=($tab -e "$cmd")         
done

gnome-terminal "${foo[@]}"

exit 0

En general, un script como este:

#!/bin/bash

tab="--tab"
cmd="bash -c '<command-line_or_script>';bash"
foo=""

for i in 1 2 ... n; do
      foo+=($tab -e "$cmd")         
done

gnome-terminal "${foo[@]}"

exit 0

abrirá una nueva terminal con n pestañas ejecutándose <command-line_or_script>en cada pestaña. Esto puede ser muy útil cuando desea, por ejemplo, abrir un terminal con algunas pestañas con el intérprete en una ruta específica (utilizando cd /pathel script anterior).

Además, lea man bash, este post y este post para entender los cambios.

He probado estos scripts y funcionan.

Radu Rădeanu
fuente
Lo mismo que dije, solo se muestra y se cierra y tampoco se produce ningún error. ¿Cómo arreglar este problema?.
user172001
ok ahora está mostrando las ventanas con pestañas pero no ejecuta la aplicación en ninguna pestaña. y también explícame un poco, cómo esto ha solucionado el problema de visualización de la ventana.
user172001
@ user172001 ¡Ahora está funcionando, verifique las nuevas ediciones!
Radu Rădeanu
Esto está muy bien. +1
Nishant
1
Intenté agregar cmd1 && cmd2a la cadena de comandos para ejecutar varios comandos. Solo parece ejecutar el primero. ¿Estoy haciendo algo descaradamente mal?
byxor
7

Se me ocurrió mi propia respuesta. Creo que este es un mejor enfoque porque:

  1. Puedo entenderlo. No soy un experto en bash y no dando ninguna explicación en la respuesta más popular para lo que es ..., ${}, -e, o@
  2. Le permite personalizar fácilmente el título y el comando para cada pestaña
  3. ¿Dije que es mucho más fácil de entender?

Tenga en cuenta que ; $SHELLal final de cada comando gnome-terminal es lo que mantiene abierta la ventana de terminal. De lo contrario, se cerraría de inmediato.

title1="tab 1"
title2="tab 2"
title3="tab 3"

cmd1="cd /etc"
cmd2="cd ~/Documents"
cmd3="cd /usr/local"

gnome-terminal --tab --title="$title1" --command="bash -c '$cmd1; $SHELL'" \
               --tab --title="$title2" --command="bash -c '$cmd2; $SHELL'" \
               --tab --title="$title3" --command="bash -c '$cmd3; $SHELL'" 
Gabriel Staples
fuente