Ouverture de plusieurs onglets avec gnome-terminal


16

J'essaie de créer une commande qui ouvrira 3 services à partir de la pile Rails, rails s, spork et autotest. Je peux exécuter ces commandes individuellement en ouvrant 3 terminaux, en accédant au dossier de l'application et en les exécutant. Je peux même ouvrir 3 nouveaux onglets et exécuter les commandes sur chacun.

Le problème est qu'ils échouent lorsque j'essaye d'ouvrir les onglets via gnome-terminal comme ceci:

gnome-terminal --tab --title="rails s" -e "rails s" --tab --title="spork" -e "spork" --tab --title="autotest" -e "autotest"

Erreur (pour spork et autotest):

There was an error creating the child process for this terminal
Failed to execute child process "spork" (No such file or directory)

Étonnamment, cela fonctionne pour les «rails s» (l'onglet montre le serveur en cours d'exécution).

Des idées?

Réponses:


9

Voici une réponse de stackoverflow.com

  1. Ajoutez un eval "$BASH_POST_RC"à la fin de votre .bashrc

  2. Définissez la BASH_POST_RCvariable d'environnement pour chaque onglet sur la commande que vous souhaitez exécuter, par exemple: gnome-terminal --working-directory="/home/zardoz/projects/my_rails_app" --tab -e 'bash -c "export BASH_POST_RC=\"rails server\"; exec bash"' --tab -e 'bash -c "export BASH_POST_RC=\"autotest\"; exec bash"'


15

Invoquer gnome-terminaltrois fois et enchaîner les commandes avec && ne fonctionnera pas , et les onglets n'apparaîtront pas dans le même terminal, et vous devrez en effet quitter le premier terminal pour que le suivant apparaisse.

La façon de vous assurer que tous vos onglets s'ouvrent en une seule fois gnome-terminalen même temps est d'utiliser le --tab-with-profile=PROFILENAMEcommutateur. Dans la commande ci-dessous, vous pouvez laisser la première commande gnome-terminal --tabtelle que c'est la première fenêtre à générer; maintenant, tout ce que vous devez savoir, c'est quel profil vous utilisez et vous pouvez utiliser --tab-with-profile=YourProfilepour appeler les autres commandes et elles apparaîtront toutes en même temps dans le terminal d'origine ouvert.

Voici votre commande modifiée:

gnome-terminal --tab --title="rails s" -e "rails s" --tab-with-profile=Default --title="spork" -e "spork" --tab-with-profile=Default --title="autotest" -e "autotest"

(Pour les futurs lecteurs: remplacez les noms de programme donnés après -epour tester la ligne de commande donnée ici; rappelez-vous que vos cibles pour -edoivent être installées et dans $PATH; pour les choses qui ne sont pas $PATHutilisées, un chemin absolu tel que, par exemple, /opt/mike/program)

N'oubliez pas de spécifier le profil réel que vous utilisez pour les --tab-with-profilecommutateurs. La première invocation de gnome-terminaldoit utiliser --tabet tout le reste --tab-with-profile. Avec cette méthode, il devrait être possible d'ouvrir un grand nombre d'onglets dans la même instance de gnome-terminal.

Trouvez le profil que vous utilisez actuellement en cliquant avec le bouton droit de la souris gnome-terminalet regardez les profils et il y aura un marqueur sur celui que vous utilisez actuellement:

entrez la description de l'image ici

Accédez aux préférences de profil pour plus d'informations et pour vérifier le nom du profil.

Pour plus d'informations, voir man gnome-terminalet les pages de manuel Ubuntu en ligne .


Remarque :

Si vous ne parvenez pas à lancer vos programmes avec gnome-terminal, ajoutez l'emplacement à $PATH, ou créez un lien symbolique et placez-le dans un $PATHemplacement, ou (ce qui était très utile ici): créez un script wrapper bash simple et appelez-le dans la gnome-terminalligne de commande ci-dessus. (Vous devez l'appeler avec un chemin absolu: c'est /location/of/script-à- dire et pas seulement son nom.)

Par exemple:

#!/bin/bash
cd $HOME/.rvm/gems/ruby-2.0.0-p0/bin 
spork
exit 0

Nommez ensuite le script, rendez-le exécutable et appelez-le dans la gnome-terminalligne de commande ci-dessus. Faites cela pour tous les programmes non repo qui sont problématiques.


Comment connaitre le profil? (J'ai essayé avec Default, mon nom d'utilisateur et ~ / .profile)
Manuel

Il indique Default mais j'obtiens la même erreur en utilisant --tab-with-profile = Default
Manuel

@Manuel L'autre possibilité est que les commandes cibles ne sont pas dans votre $PATH; spécifiez l'emplacement de sporket les autres avec un chemin absolu.

La commande que j'utilise est gnome-terminal --tab --title = "rails s" -e "rails s" --tab-with-profile = Par défaut --title = "spork" -e "spork" - tab-with-profile = Par défaut --title = "autotest" -e "autotest" (copier / coller à partir de votre réponse). À propos de $ PATH, si c'est le problème, pourquoi cela fonctionne-t-il sur un onglet ouvert via le menu?
Manuel

@Manuel Comme vous le dites dans votre question, vous devez aller dans "le dossier de l'application" et les exécuter à partir de là, ce qui signifie qu'ils ne sont pas dans $PATH. La méthode dans la réponse est celle que j'utilise pour lancer tous les programmes de ligne de commande installés dans le référentiel dans différents onglets dans la même gnome-terminalfenêtre, et cela fonctionne toujours, car ces autres programmes sont dans $ PATH.

0

gnome-terminal --tab -- sh -c "python3 'test.py' ; bash"

ce code ouvre un nouvel onglet dans un terminal exécutant un script python et une fois terminé, ce nouvel onglet ne se fermera pas, car j'ai ajouté 'bash' à la fin de ce code ...

si vous le voulez plusieurs fois, mettez-le dans une boucle while dans votre script bash

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.