Exécutez terminator dans le répertoire nécessaire, puis exécutez la commande nécessaire

9

Je souhaite ouvrir Terminator dans un répertoire spécifique, par exemple /home/downloads/, puis exécuter une commande.

J'ai fait la première partie par cette "commande personnalisée": cd /home/downloads; bash Terminator démarre maintenant dans ce répertoire, mais comment puis-je faire la deuxième partie?

Maintenant que terminator a été démarré dans le répertoire des téléchargements, je veux exécuter n'importe quelle commande que je veux, par exemple lsou rakecommande ou utiliser certains alias comme commandes. Comment puis-je faire ceci?

J'appuie sur le bouton droit de la souris dans le terminateur et je choisis Paramètres, puis Disposition, puis j'ajoute du texte dans la section des commandes personnalisées.

Toutes ces opérations doivent être effectuées automatiquement après le démarrage du terminateur.

Asq
la source
Quelle commande voulez-vous exécuter? Il suffit de l'exécuter. Voulez-vous que cela se produise automatiquement chaque fois que vous ouvrez Terminator? Veuillez modifier votre question et i) clarifier ce que vous voulez faire et ii) nous dire exactement comment vous avez configuré cette "commande personnalisée", était-ce dans les options de terminator?
terdon
Oui, je veux que la première puis la deuxième commande s'exécutent automatiquement après l'exécution de terminator, mais maintenant je sais seulement comment exécuter la première commande et cela fonctionne, mais je ne sais pas comment exécuter la deuxième commande. La première commande est: "cd" vers n'importe quel catalogue et la deuxième commande doit être celle que je veux, dans ce catalogue ou non. J'édite ma question. Désolé pour ma langue laide.
Asq

Réponses:

4

Exécutez en cd /home/downloads; exec bashtant que commande personnalisée. (Le execmodule intégré garantit que ce bashsera un enfant de l'émulateur de terminal; sans lui, il pourrait finir par être un petit-enfant.) Vous pouvez exécuter terminator -e 'cd /home/downloads; exec bash'la ligne de commande.

Vous ne pouvez pas utiliser d'alias dans la commande personnalisée car vos alias sont définis par ~/.bashrc, mais ce fichier n'est chargé que par des shells interactifs, pas par le shell de script qui est utilisé ici comme colle entre l'émulateur de terminal et le shell de script. Si vous souhaitez utiliser des alias, vous devez les charger explicitement. Si vous les gardez dans un fichier séparé, ce serait quelque chose comme

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

ou sur la ligne de commande

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

Si vos alias sont dedans ~/.bashrc, alors utilisez . ~/.bashrc, mais attention, il peut y avoir des choses dans votre .bashrcqui provoquent des erreurs car le shell n'est pas interactif. Si cela se produit, la solution la plus simple consiste à diviser vos alias (et fonctions et tout autre paramètre que vous souhaitez utiliser dans le code de collage) dans un fichier distinct et à utiliser .pour inclure ceux de .bashrc.

Gilles 'SO- arrête d'être méchant'
la source
3

J'ai eu le même problème pour activer les environnements virtuels avec Terminator .

L'astuce consiste à tout faire avec juste commande « une »: bash. Profitant de son -ioption (interactive) et en utilisant une coutume --rcfiledans laquelle PROMPT_COMMANDest réglé ce que nous voulons exécuter. Le résultat serait comme ceci:

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

Remplacez simplement your commands; go here;par vos commandes réelles. Voir cette réponse pour une explication .

Peque
la source
Une idée pourquoi la commande que je spécifie ne peut pas être quittée avec ctrl + c?
Flowkap
2

Ajoutez simplement l'autre commande de la même manière que vous avez ajouté la première. Par exemple, pour exécuter ls:

cd /home/downloads; ls; bash

Vous pouvez l'ajouter à l'option "commande" de votre profil:

entrez la description de l'image ici

La raison pour laquelle vous ne l'obtenez pas rakeest qu'elle n'est pas dans le chemin par défaut. Pour l'utiliser, vous devez spécifier le chemin. Donc, exécutez d'abord cette commande dans votre terminal:

type rake

Cela retournera quelque chose comme /foo/bin/rake. C'est le chemin dont vous avez besoin. Prenez-le et ajoutez-le à la commande personnalisée ci-dessus:

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

Cela ne fonctionnera pas pour les alias. Les alias sont configurés par votre shell et ne seront pas disponibles ici. Une solution de contournement consiste à utiliser des scripts à la place. Donc, si vous avez un alias comme celui-ci:

alias foo="command1 argument2"

Créez un script, appelez-le foo.shet enregistrez-le /home/youruser/bin, avec ces contenus:

#!/usr/bin/env bash
command1 argument2

Et rendez-le exécutable:

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

Ensuite, dans la section "Commande personnalisée", utilisez:

cd /home/downloads; /home/username/bin/foo.sh; bash
terdon
la source
Oui, je sais cela et la commande "ls" fonctionne, mais 1. par exemple, la commande "rake" ne fonctionne pas et le terminal affiche l'erreur: "/ bin / bash: rake: commande introuvable" 2. J'ai quelques alias, et pour exemple "cd / home / téléchargements; 'aliasname'; bash" ne fonctionne pas non plus, le terminal affiche la même erreur
Asq
@Asq bien, oui, c'est pourquoi je vous ai demandé de nous dire quelle commande vous voulez exécuter. Veuillez modifier votre question et donner des exemples spécifiques. Les alias ne fonctionneront pas, vous pouvez oublier cela, mais vous rakedevriez le faire si vous utilisez le chemin complet /path/to/rake.
terdon
Je dois modifier ma question principale? Et que voulez-vous dire "si vous utilisez le chemin complet / chemin / vers / râteau"? Je fais un cd dans le répertoire où j'utilise toujours rake et ça marche, mais "cd / path / to / rake; rake; bash" ne fonctionne pas
Asq
@Asq oui, veuillez modifier votre question d'origine. Ne fais pas cd /path/to/rake; rake; bashça /path/to/rake; rake; bash.
terdon
:( j'utilise la commande rake lorsque je suis dans le répertoire / home / 123. J'ajoute maintenant dans la commande personnalisée ceci: "/ home / 123; rake; bash" mais la console m'affiche 2 erreurs: 1. / bin / bash: / home / 123: Ceci est un catalogue 2. / bin / bash: rake: commande introuvable
Asq
1

Si vous faites un clic droit sur une fenêtre Terminator ouverte, vous pouvez choisir "Préférences". Choisissez le "Profil" et à partir de là, l'onglet "Commande". Il y a une case à cocher intitulée «Exécuter une commande personnalisée au lieu de mon shell».

Je crois que c'est ce que vous recherchez.

rcjohnson
la source
1

N'utilisez simplement pas ' command =' pour changer de répertoire. Utilisez-le pour votre commande réelle!

Lors de l'édition .config/terminator/config, spécifiez simplement

  • ' directory = <dir>' lorsque vous souhaitez que le terminal se place automatiquement dans un répertoire donné, ou
  • ' command = <cmd>; <your_shell>' lorsque vous souhaitez exécuter une commande personnalisée, et pas simplement changer de répertoire

Par exemple:

  • Si vous voulez seulement que le terminal se connecte <dir>au démarrage, alors spécifiez 'répertoire' et laissez 'commande' vide:

    [[terminal7]]]
    directory = /home/dan/src/wmc
    order = 1
    parent = child3
    profile = default
    type = Terminal
    uuid = ebbe5595-06be-43ff-b7ce-4534aa6bb7f8
  • Si vous souhaitez uniquement exécuter une commande personnalisée, spécifiez uniquement la commande:

    [[terminal7]]]
    command = /home/dan/mine/my-custom-command
    order = 1
    parent = child3
    profile = default
    type = Terminal
    uuid = ebbe5595-06be-43ff-b7ce-4534aa6bb7f8
  • Si vous voulez à la fois cd dans DIR et exécuter la commande:

    [[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
la source