Tengo tres scripts que necesito ejecutar cuando inicio mi máquina Ubuntu, comienzan los servicios que uso en mi entorno de desarrollo.
Para hacer eso, abro manualmente tres terminales y escribo los comandos.
¿Hay alguna forma de crear un script que abra tres terminales y ejecute un comando en cada uno de estos? (Cada comando debe estar en una ventana de terminal separada para que pueda ver su salida).
command-line
scripts
services
JSBach
fuente
fuente
gnome-terminal -e command
solo funciona sicommand
se cita. Así que esto no funciona:gnome-terminal -e "echo hello world; sleep 3"
pero esto hace:gnome-terminal -e "bash -c 'echo hello world; sleep 3'"
. Suspiro.; $SHELL
al final del comando. Ej:gnome-terminal --tab --title="test" --command="bash -c 'cd /etc; ls; $SHELL'"
En lugar de codificar
gnome-terminal
,konsole
etc., utilice el sistema Alternativas. El programa que ejecuta el emulador de terminal predeterminado es:En mi sistema, abre una nueva instancia de Konsole cada vez que ejecuto este comando.
Afortunadamente, los terminales parecen admitir la
-e
opción de ejecutar un comando (lo verifiqué parakonsole
ygnome-terminal
). Los argumentos después del comando se pasan al comando invocado. Bash se niega a permanecer abierto en mi terminal, se necesita un script adicional para obtener un terminal:Si guardó el script anterior como
/home/user/hacky
y lo hizo ejecutable, ejecutaría sus scripts con:Se requiere la ruta completa y
/home/user/hacky
debe ser ejecutable.Mi intento anterior de ejecutar un script en una nueva ventana de terminal se puede encontrar en la revisión # 2 , fue antes de darme cuenta de que se pueden pasar los argumentos
x-terminal-emulator
.fuente
bash
) o tener una línea comoread -p "Press Return to continue"
.cd xxx && start.sh
. El intérprete ve el && como la segunda parte del comando (lo cual es lógico), pero si lo cito, entonces trata de ejecutar todo como un gran argumentoMuy simple-
Esto es suficiente para otros comandos que no necesitan mostrar nada en la terminal. Pero aquí hay que ver el estado que se muestra.
Por lo tanto, debe ejecutarse en una ventana de terminal
La otra publicación pretende
[]
ser un marcador de posiciónAquí "NAMEOFTHEPROFILE" debe reemplazarse con el nombre del perfil que "contiene el terminal cuando sale el comando".
fuente
[]
era solo marcador de posición--window-with-profile=NAMEOFTHEPROFILE
a lo que he dadoAyudado por la respuesta de @ nickguletskii , y mi propio comentario debajo de su respuesta, e inspirado por el voto de @ grabantot de mi comentario, esta es mi forma preferida de hacerlo, especialmente cuando quiero que el terminal permanezca abierto para que luego pueda usarlo manualmente.
Ex. uso: esto es realmente útil para agregar a sus programas de inicio para que este script se ejecute, abra un terminal, cree y nombre una pestaña en el terminal y ejecute un comando para usted. O bien, simplemente puede agregar un enlace simbólico a este script en su escritorio. Utilizo este tipo de enfoque para poder hacer doble clic en un solo icono en mi escritorio y hacer que abra un montón de terminales (con varias pestañas nombradas de acuerdo con el trabajo que voy a hacer en ellas) y programas para configurar mi entorno de programación, por ejemplo, para el trabajo diario.
Aquí hay un ejemplo artificial, que abre una sola pestaña, la titula "prueba", luego ejecuta el comando simple
cd /etc; ls
dentro de ella. La$SHELL
parte al final obliga al shell a permanecer abierto para que pueda ver su salida y continuar usándolo (aprendí esto en otro lugar en Stack Overflow):Aquí hay un ejemplo más complicado que abre 3 pestañas separadas en el mismo terminal gnome. Este es exactamente el tipo de cosas que hace el acceso directo de mi escritorio para que pueda abrir un montón de ventanas de programación a la vez:
Aquí hay un desglose de ese comando anterior:
gnome-terminal
= abrir un terminal gnomo--tab
= abre una pestaña única para lo que viene después--title="tab 1"
= título de esta pestaña "pestaña 1"--command="bash -c 'cd /etc; ls; $SHELL'"
= ejecuta elbash -c 'cd /etc; ls; $SHELL'
comando, que es un comando que acabo de inventar como ejemplo; esto es lo que hace:bash -c
dice que es un bash 'c'ommandcd /etc
= 'c'hange' d'irectory en la ruta "/ etc"ls
= 'No contiene el contenido de este directorio$SHELL
= este tidbit críptico es necesario para mantener abierto el shell para que pueda trabajar con él. Si desea que se abra el shell, ejecute su comando, luego cierre, simplemente elimine esta parte. Sin embargo, quiero que la pestaña permanezca abierta para poder hacer que la programación sea mágica. :)--tab
parte para producir la pestaña 2, luego otra vez para la pestaña 3. Personalice a su gusto.Captura de pantalla:
fuente
comentando la respuesta de Lekensteyn. Sé que esta es una publicación antigua, pero para cualquiera que lo encuentre útil (como acabo de hacer), en lugar de crear otro "script hacky" con solo poner una función dentro del script que está llamando
Llame a su script con "x-terminal-emulator -e / path / to / script hacky_function argumentos opcionales aquí"
No olvides poner "$ @" al final del guión
fuente
Use el comando de pantalla y -d desconectar de una sesión de pantalla existente, y vuelva a adjuntar aquí -m forzar una nueva sesión de pantalla -S crear una sesión con nombre en lugar de usar el nombre predeterminado
fuente