Eseguire terminator nella directory necessaria e quindi eseguire il comando necessario


9

Voglio aprire Terminator in una directory specifica, ad esempio /home/downloads/, e quindi eseguire un comando.

Ho fatto la prima parte con questo "comando personalizzato": cd /home/downloads; bash Terminator ora inizia in questa directory, ma come posso fare la seconda parte?

Ora che il terminatore è stato avviato nella directory dei download, voglio eseguire qualsiasi comando che voglio, ad esempio lso rakecomando o utilizzare alcuni alias come comandi. Come posso fare questo?

Premo il tasto destro del mouse nel terminatore e scelgo Parametri, quindi Layout, quindi aggiungo testo nella sezione Comando personalizzato.

Tutti questi devono essere eseguiti automaticamente dopo l'avvio del terminatore.


Quale comando vuoi eseguire? Eseguilo e basta. Vuoi che ciò accada automaticamente ogni volta che apri terminator? Si prega di modificare la tua domanda e i) chiarire che cosa si vuole fare e ii) ci dicono esattamente come si imposta il "comando personalizzato", era all'interno delle impostazioni del terminatore?
terdon

Sì, voglio che il primo e poi il secondo comando vengano eseguiti automaticamente dopo l'esecuzione del terminatore, ma ora so solo come eseguire il primo comando e ha funzionato, ma non so come eseguire il secondo comando. Il primo comando è: "cd" per qualsiasi catalogo e il secondo comando deve essere quello che voglio, in questo catalogo o meno. Modifico la mia domanda. Scusa per la mia brutta lingua.
Asq,

Risposte:


4

Esegui cd /home/downloads; exec bashcome comando personalizzato. (L' execintegrato assicura che bashsarà un figlio dell'emulatore di terminale; senza di esso, potrebbe finire per essere un nipote.) È possibile eseguire terminator -e 'cd /home/downloads; exec bash'dalla riga di comando.

Non puoi usare gli alias nel comando personalizzato perché i tuoi alias sono definiti da ~/.bashrc, ma quel file viene caricato solo da shell interattive, non dalla shell di scripting che viene utilizzata qui come colla tra l'emulatore di terminale e la shell di scripting. Se si desidera utilizzare gli alias, è necessario caricarli in modo esplicito. Se li conservi in ​​un file separato, sarebbe qualcosa del genere

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

o dalla riga di comando

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

Se i tuoi alias sono presenti ~/.bashrc, usa . ~/.bashrc, ma fai attenzione che potrebbero esserci degli elementi .bashrcche causano errori perché la shell non è interattiva. In questo caso, la soluzione più semplice è quella di dividere gli alias (e le funzioni e qualsiasi altra impostazione che si desidera utilizzare nel codice colla) in un file separato e utilizzare .per includerli .bashrc.


3

Ho avuto lo stesso problema per l' attivazione di ambienti virtuali con Terminator .

Il trucco è quello di fare tutto con il comando solo "uno": bash. Sfruttando la sua -iopzione (interattiva) e usando un'usanza --rcfilein cui PROMPT_COMMANDè impostato ciò che vogliamo eseguire. Il risultato sarebbe così:

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

Sostituisci semplicemente your commands; go here;con i tuoi comandi attuali. Vedi questa risposta per una spiegazione .


Qualche idea sul perché il comando che specifico non possa essere chiuso con ctrl + c?
Flowkap,

2

Aggiungi semplicemente l'altro comando nello stesso modo in cui hai aggiunto il primo. Ad esempio, per eseguire ls:

cd /home/downloads; ls; bash

Puoi aggiungerlo all'opzione "comando" del tuo profilo:

inserisci qui la descrizione dell'immagine

Il motivo per cui non si ottiene rakeè che non si trova nel percorso predefinito. Per usarlo, è necessario specificare il percorso. Quindi, prima esegui questo comando nel tuo terminale:

type rake

Ciò restituirà qualcosa di simile /foo/bin/rake. Questo è il percorso che ti serve. Prendilo e aggiungilo al comando personalizzato sopra:

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

Questo non funzionerà per gli alias. Gli alias sono impostati dalla shell e non saranno disponibili qui. Una soluzione alternativa consiste nell'utilizzare gli script. Quindi, se hai un alias come questo:

alias foo="command1 argument2"

Crea uno script, chiamalo foo.she salvalo in /home/youruser/bin, con questi contenuti:

#!/usr/bin/env bash
command1 argument2

E renderlo eseguibile:

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

Quindi, nella sezione "Comando personalizzato", utilizzare:

cd /home/downloads; /home/username/bin/foo.sh; bash

Sì, lo so e il comando "ls" funziona, ma 1. ad esempio il comando "rake" non funziona e il terminale mostra l'errore: "/ bin / bash: rake: comando non trovato" 2. Ho alcuni alias, e per esempio "cd / home / download; 'aliasname'; bash" inoltre non funziona, il terminale mostra lo stesso errore
Asq

@Asq bene, sì, è per questo che ti ho chiesto di dirci quale comando vuoi eseguire. Modifica la tua domanda e fornisci esempi specifici. Gli alias non funzioneranno, puoi dimenticartene, ma rakedovresti usare il percorso completo /path/to/rake.
terdon

Devo modificare la mia domanda principale? E cosa intendi con "se usi l'intero percorso / percorso / verso / rastrello"? Eseguo il cd nella directory in cui utilizzo sempre rake ed è funzionante, ma "cd / path / to / rake; rake; bash" non funziona
Asq

@Asq sì, modifica la domanda originale. Non cd /path/to/rake; rake; bashfarlo /path/to/rake; rake; bash.
terdon

:( Uso il comando rake quando sono nella directory / home / 123. Aggiungo ora nel comando personalizzato questo: "/ home / 123; rake; bash" ma la console mi mostra 2 errori: 1. / bin / bash: / home / 123: Questo è un catalogo 2. / bin / bash: rake: comando non trovato
Asq

1

Se fai clic con il pulsante destro del mouse su una finestra Terminator aperta, puoi scegliere "Preferenze". Scegli il "Profilo" e da lì la scheda "Comando". C'è una casella di controllo intitolata "Esegui un comando personalizzato invece della mia shell".

Credo che sia quello che stai cercando.


1

Basta non usare ' command =' per cambiare directory. Usalo per il tuo comando reale!

Durante la modifica .config/terminator/config, basta specificare

  • ' directory = <dir>' quando si desidera che il terminale esegua il cd automaticamente in una determinata directory, oppure
  • ' command = <cmd>; <your_shell>' quando si desidera eseguire un comando personalizzato e non semplicemente cambiare directory

Per esempio:

  • Se vuoi solo che il terminale esegua il cd in <dir>avvio, quindi specifica 'directory' e lascia 'comando' vuoto:

    [[terminal7]]]
    directory = /home/dan/src/wmc
    order = 1
    parent = child3
    profile = default
    type = Terminal
    uuid = ebbe5595-06be-43ff-b7ce-4534aa6bb7f8
    
  • Se si desidera solo eseguire un comando personalizzato, specificare solo il comando:

    [[terminal7]]]
    command = /home/dan/mine/my-custom-command
    order = 1
    parent = child3
    profile = default
    type = Terminal
    uuid = ebbe5595-06be-43ff-b7ce-4534aa6bb7f8
    
  • Se si desidera che sia cd in DIR ed eseguire il 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
    
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.