Necesito abrir varias pestañas de terminal, darles títulos, ir a un directorio y hacer que cada pestaña ejecute un comando.
Soy nuevo en Linux y scripts de shell, después de buscar en línea y verificar algunas soluciones, hice este script ( EDITADO en base a las respuestas a continuación):
#!/bin/bash
cd /media/Extra/Project
tab=" --tab-with-profile=Default"
options=(--tab --title=Terminal)
cmds[1]="'rails s'"
titles[1]="Server"
cmds[2]="'rails c'"
titles[2]="Console"
for i in 1 2; do
options+=($tab --title="${titles[i]}" -e "bash -c \"${cmds[i]} ; bash\"" )
done
gnome-terminal "${options[@]}"
exit 0
Abre las pestañas, las nombra, pero no puede ejecutar los comandos que generan este error:
Se produjo un error al crear el proceso secundario para este terminal
Otra deficiencia es que si detuve el comando en ejecución, cierra la pestaña, lo que no quiero. Necesito poder detener el comando y ejecutarlo nuevamente dentro de la misma pestaña.
¿Qué tiene de malo el guión? ¿Hay otra forma más simple de hacer eso?
Nota: Si eliminé la parte (-e "\" bash -c $ {cmds [i]}; bash \ "") del comando, se abren las pestañas en el directorio dado y se nombran, sin errores.
-Editar-1:
Después de aplicar la respuesta @Tuknutx a continuación y editar el script, el error ya no aparece, pero me da bash: rails c: command not found
y rails s
crea una nueva aplicación de rails en lugar de iniciar el servidor de rails, estoy usando .rmvrc para seleccionar un conjunto de gemas una vez que se accede a esta carpeta .
cmds[1]="'ping 192.168.9.9'"
me da el mismo error pero lo resolví eliminando la comilla simple. Entonces, si escribocmds[1]="ping 192.168.9.9"
, funciona.tab=" --tab-with-profile=Default"
??Respuestas:
¡Recomendaría usar
tmux
contmuxinator
, hará el trabajo por usted, y también puede confiar en losterminator
diseños!Para ver la
terminator
distribución del diseño, la respuesta de mhnagaoka aquí también pregunta aububuntu:fuente
Para resumir algunas de las otras respuestas y sus comentarios, esto es lo que terminé con:
Tenga en cuenta que quité la pestaña 'maestro' y los perfiles y los títulos (que parecen estar en desuso
gnome-terminal
).fuente
$tab -e...
Option “-e” is deprecated and might be removed in a later version of gnome-terminal.
"Use" - "para terminar las opciones y poner la línea de comando para ejecutar después.. that's an output but the comands get executed. When i use
$ tab - `el comando no se ejecuta y el terminal muestra dsis:There was an error creating the child process for this terminal. Failed to execute child process “bash -c 'echo Banana ; bash'” (No such file or directory)
Prueba esto:
de lo contrario, la expresión completa después de -e se interpretará como el comando.
Para incluir alias de .bashrc use en
-ic
lugar dec
fuente
bash: rails c: command not found
y 'rails s' crea una nueva aplicación de rails en lugar de iniciar el servidor de rails. Esto cambia el alcance de la pregunta, larails c
en una terminal sin nada más? Tal vez debería serrails -c
?rvm list gemsets
y diceNo command 'rvm' found
... ¡ejecuta el mismo comandorvm list gemsets
en la primera pestaña que se abre sin ejecutar un comando y funcionó! ¿ejecuta el comando antes de que se cargue el entorno y se cargue el archivo .rvmrc?El argumento que le está dando a la opción -e
"bash -c command; bash"
incluye las comillas. ¡Interpreta toda esa cadena como el nombre de un comando! Tal vez puedas probar:-e "bash -c 'command ; bash'"
. De esta manera, lo que se ejecuta en la ventana de su terminal escommand
, y después de que se ejecuta, se le da un shell de hija, que supongo que es lo que desea. Por cierto, también puedes decir'command & bash'
; Esto ejecutará el comando en segundo plano y le dará el shell hija de inmediato.fuente
options+=($tab --title="${titles[i]}" -e "\"bash -c ${cmds[i]} ;bash\"" )
enoptions+=($tab --title="${titles[i]}" -e "\"bash -c '${cmds[i]} ;bash'\"" )
y me dio el mismo error .. estoy haciendo las cosas bien?