Ejecute terminator en el directorio necesario y luego ejecute el comando necesario

9

Quiero abrir Terminator en un directorio específico, por ejemplo /home/downloads/, y luego ejecutar un comando.

Hice la primera parte con este "comando personalizado": cd /home/downloads; bash Terminator ahora comienza en este directorio, pero ¿cómo puedo hacer la segunda parte?

Ahora que terminador se inició en el directorio de descargas, quiero ejecutar cualquier comando que quiero, por ejemplo, lso rakede comandos o utilizar algunos alias como comandos. ¿Cómo puedo hacer esto?

Presiono el botón derecho del mouse en el terminador y elijo Parámetros, luego Diseños, luego agrego texto en la sección Comando personalizado.

Todo esto debe llevarse a cabo automáticamente después del inicio del terminador.

Asq
fuente
¿Qué comando quieres ejecutar? Solo ejecútalo. ¿Desea que esto suceda automáticamente cada vez que abra Terminator? Por favor, editar su pregunta y i) aclarar lo que quiere hacer y ii) nos dirá exactamente cómo se configura este "comando personalizado", era que en las opciones de terminación?
terdon
Sí, quiero que el primer y el segundo comando se ejecuten automáticamente después de ejecutar el terminador, pero ahora solo sé cómo ejecutar el primer comando y funcionó, pero no sé cómo ejecutar el segundo comando. El primer comando es: "cd" para cualquier catálogo y el segundo comando debe ser el que quiera, en este catálogo o no. Edito mi pregunta. Perdón por mi idioma feo.
Asq

Respuestas:

4

Ejecutar cd /home/downloads; exec bashcomo el comando personalizado. (La función execintegrada asegura que bashserá un hijo del emulador de terminal; sin él, podría terminar siendo un nieto). Puede ejecutar terminator -e 'cd /home/downloads; exec bash'en la línea de comandos.

No puede usar alias en el comando personalizado porque sus alias están definidos por ~/.bashrc, pero ese archivo solo se carga por shells interactivos, no por el shell de scripting que se usa aquí como pegamento entre el emulador de terminal y el shell de scripting. Si desea utilizar alias, debe cargarlos explícitamente. Si los mantiene en un archivo separado, sería algo así como

. ~/.bash_aliases; cd /home/downloads; exec bash

o en la línea de comando

terminator -x bash -c '. ~/.bash_aliases; cd /home/downloads; exec bash'

Si sus alias están dentro ~/.bashrc, úselos . ~/.bashrc, pero tenga en cuenta que puede haber cosas en su .bashrccausa que causen errores porque el shell no es interactivo. Si esto sucede, la solución más fácil es dividir sus alias (y funciones y cualquier otra configuración que desee usar en el código de pegamento) en un archivo separado y usar .para incluirlos .bashrc.

Gilles 'SO- deja de ser malvado'
fuente
3

Tuve el mismo problema para activar entornos virtuales con Terminator .

El truco es hacer todo con el comando sólo "uno": bash. Aprovechando su -iopción (interactiva) y utilizando una costumbre --rcfileen la que PROMPT_COMMANDse configura lo que queramos ejecutar. El resultado sería así:

command = "bash --rcfile <(cat ${HOME}/.bashrc; echo 'export PROMPT_COMMAND="your commands; go here; unset PROMPT_COMMAND"') -i"

Simplemente reemplace your commands; go here;con sus comandos reales. Vea esta respuesta para una explicación .

Peque
fuente
¿Alguna idea de por qué el comando que especifico no se puede salir con ctrl + c?
Flowkap
2

Simplemente agregue el otro comando de la misma manera que agregó el primero. Por ejemplo, para ejecutar ls:

cd /home/downloads; ls; bash

Puede agregar esto a la opción de "comando" de su perfil:

ingrese la descripción de la imagen aquí

La razón por la que no obtienes rakees que no está en la ruta predeterminada. Para usarlo, debe especificar la ruta. Entonces, primero ejecute este comando en su terminal:

type rake

Eso devolverá algo así /foo/bin/rake. Ese es el camino que necesitas. Tómelo y agréguelo al comando personalizado anterior:

cd /home/downloads; /foo/bin/rake; bash

Esto no funcionará para los alias. Su shell configura los alias y no estarán disponibles aquí. Una solución alternativa es utilizar scripts en su lugar. Entonces, si tienes un alias como este:

alias foo="command1 argument2"

Crea un script, llámalo foo.shy guárdalo /home/youruser/bincon estos contenidos:

#!/usr/bin/env bash
command1 argument2

Y hazlo ejecutable:

chmod a+x /home/username/bin/foo.sh

Luego, en la sección "Comando personalizado", use:

cd /home/downloads; /home/username/bin/foo.sh; bash
terdon
fuente
Sí, sé que esto y el comando "ls" funcionan, pero 1. por ejemplo, el comando "rake" no funciona y el terminal muestra un error: "/ bin / bash: rake: comando no encontrado" 2. Tengo algunos alias, y para ejemplo "cd / home / downloads; 'aliasname'; bash" tampoco funciona, el terminal muestra el mismo error
Asq
@Asq bueno, sí, por eso te pedí que nos dijeras qué comando quieres ejecutar. Edite su pregunta y proporcione ejemplos específicos. Los alias no funcionarán, puede olvidarse de eso, pero rakedebería hacerlo si usa la ruta completa /path/to/rake.
terdon
¿Debo editar mi pregunta principal? ¿Y qué quieres decir con "si usas la ruta completa / ruta / a / rastrillo"? Cd al directorio donde siempre uso rake y funciona, pero "cd / path / to / rake; rake; bash" no funciona
Asq
@Pregunta sí, edite su pregunta original. No lo cd /path/to/rake; rake; bashhagas /path/to/rake; rake; bash.
terdon
:( uso el comando rake cuando estoy en el directorio / home / 123. Agrego ahora en el comando personalizado esto: "/ home / 123; rake; bash" pero la consola me muestra 2 errores: 1. / bin / bash: / home / 123: Este es un catálogo 2. / bin / bash: rake: comando no encontrado
Asq
1

Si hace clic derecho en una ventana abierta de Terminator, puede elegir "Preferencias". Elija el "Perfil" y desde allí, la pestaña "Comando". Hay una casilla de verificación titulada "Ejecutar un comando personalizado en lugar de mi shell".

Creo que eso es lo que estás buscando.

rcjohnson
fuente
1

Simplemente no uses 'command = ' para cambiar el directorio. Úselo para su comando real!

Al editar .config/terminator/config, solo especifique

  • 'directory = <dir> ' cuando desea que el terminal se cd automáticamente en un directorio dado, o
  • ' command = <cmd>; <your_shell>' cuando desea ejecutar un comando personalizado, y no simplemente para cambiar el directorio

Por ejemplo:

  • Si solo desea que el terminal ingrese en el CD <dir>al inicio, especifique 'directorio' y deje vacío 'comando':

    [[terminal7]]]
    directory = /home/dan/src/wmc
    order = 1
    parent = child3
    profile = default
    type = Terminal
    uuid = ebbe5595-06be-43ff-b7ce-4534aa6bb7f8
  • Si solo desea ejecutar un comando personalizado, solo especifique el comando:

    [[terminal7]]]
    command = /home/dan/mine/my-custom-command
    order = 1
    parent = child3
    profile = default
    type = Terminal
    uuid = ebbe5595-06be-43ff-b7ce-4534aa6bb7f8
  • Si desea que ambos ingresen en DIR y ejecuten el comando:

    [[terminal7]]]
    directory = /home/dan/dl-dir
    command = /home/dan/mine/my-custom-command-to-run-in-dlDIR
    order = 1
    parent = child3
    profile = default
    type = Terminal
    uuid = ebbe5595-06be-43ff-b7ce-4534aa6bb7f8
1111161171159459134
fuente