Öffnen mehrerer Tabs mit dem Gnome-Terminal

16

Ich versuche, einen Befehl zu erstellen, der 3 Dienste aus dem Rails-Stack, den Rails s, dem Spork und dem Autotest öffnet. Ich kann diese Befehle einzeln ausführen, indem ich 3 Terminals öffne, in den App-Ordner gehe und sie ausführe. Ich kann sogar 3 neue Registerkarten öffnen und die Befehle für jede ausführen.

Das Problem ist, dass sie fehlschlagen, wenn ich versuche, die Tabs über das Gnome-Terminal wie folgt zu öffnen:

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

Fehler (für Spork und Autotest):

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

Überraschenderweise funktioniert es für "Rails" (die Registerkarte zeigt den Server läuft).

Irgendwelche Ideen?

Manuel
quelle

Antworten:

9

Unten finden Sie eine Antwort von stackoverflow.com

  1. Fügen Sie eval "$BASH_POST_RC"am Ende Ihrer .bashrc ein hinzu

  2. Stellen Sie die BASH_POST_RCUmgebungsvariable für jede Registerkarte auf den Befehl ein, den Sie ausführen möchten, z. 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"'

Grün
quelle
15

Das gnome-terminaldreimalige Aufrufen und Zusammenführen der Befehle mit funktioniert && nicht , und die Registerkarten werden nicht im selben Terminal angezeigt. In der Tat müssen Sie das erste Terminal beenden, damit das nächste Terminal angezeigt wird.

Wenn Sie sicherstellen möchten, dass alle Registerkarten gleichzeitig geöffnet gnome-terminalsind, müssen Sie den --tab-with-profile=PROFILENAMESchalter verwenden. Im folgenden Befehl können Sie den ersten Befehl so gnome-terminal --tabbelassen, als wäre es das erste zu erzeugende Fenster. Jetzt müssen Sie nur noch wissen, welches Profil Sie verwenden, und Sie können --tab-with-profile=YourProfiledie anderen Befehle aufrufen, und alle werden gleichzeitig im ursprünglich geöffneten Terminal angezeigt.

Hier ist Ihr Befehl geändert:

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"

(Für zukünftige Leser: Ersetzen Sie die nachstehenden Programmnamen -e, um die hier angegebene Befehlszeile zu testen. Denken Sie daran, dass Ihre Ziele für -einstalliert und aktiviert sein müssen $PATH. Für Dinge, die nicht $PATHverwendet werden, ist ein absoluter Pfad wie z. B. erforderlich. /opt/mike/program)

Denken Sie daran, das tatsächliche Profil anzugeben, das Sie für die --tab-with-profileSwitches verwenden. Der erste Aufruf von gnome-terminalmuss --tabund den Rest verwenden --tab-with-profile. Mit dieser Methode sollte es möglich sein, eine große Anzahl von Registerkarten in derselben Instanz von zu öffnen gnome-terminal.

Suchen Sie das aktuell verwendete Profil, indem Sie mit der rechten Maustaste darauf klicken gnome-terminalund sich die Profile ansehen. Auf dem aktuell verwendeten Profil befindet sich eine Markierung:

Bildbeschreibung hier eingeben

In den Profileinstellungen finden Sie weitere Informationen und können den Namen des Profils überprüfen.

Weitere Informationen finden Sie unter man gnome-terminalund auf den Ubuntu-Online-Hilfeseiten .


Hinweis :

Wenn Sie Probleme beim Starten Ihrer Programme haben gnome-terminal, fügen Sie entweder den Speicherort hinzu $PATHoder $PATHerstellen Sie einen Symlink und platzieren Sie ihn an einem Speicherort. Oder (was hier sehr nützlich war): Erstellen Sie ein einfaches Bash-Wrapper-Skript und rufen Sie das in der gnome-terminalobigen Befehlszeile auf. (Sie müssen es mit einem absoluten Pfad aufrufen: dh /location/of/scriptund nicht nur dem Namen.)

Als Beispiel:

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

Benennen Sie das Skript, machen Sie es ausführbar und rufen Sie es in der gnome-terminalBefehlszeile oben auf. Tun Sie dies für alle problematischen Non-Repo-Programme.

Dessert
quelle
Woher kenne ich das Profil? (Ich habe es mit Default, meinem Benutzernamen und ~ / .profile versucht.)
Manuel
Es heißt Standard, aber ich bekomme den gleichen Fehler mit --tab-with-profile = Standard
Manuel
@Manuel Die andere Möglichkeit ist, dass die Zielbefehle nicht in Ihrer Liste enthalten sind. Geben Sie $PATHden Speicherort sporkund die anderen Befehle mit einem absoluten Pfad an.
Der Befehl, den ich benutze, ist gnome-terminal --tab --title = "Schienen s" -e "Schienen s" --tab-with-profile = Standard --title = "Spork" -e "Spork" - tab-with-profile = Standard --title = "autotest" -e "autotest" (Kopieren / Einfügen aus Ihrer Antwort). Über $ PATH, wenn dies das Problem ist, warum funktioniert es dann auf einer Registerkarte, die über das Menü geöffnet wird?
Manuel
@ Manuel Wie du in deiner Frage sagst, musst du in den "App-Ordner" gehen und sie von dort ausführen, was bedeutet, dass sie nicht in sind $PATH. Die Methode in der Antwort ist die, die ich verwende, um alle im Repository installierten Befehlszeilenprogramme auf verschiedenen Registerkarten im selben gnome-terminalFenster zu starten. Sie funktioniert immer, da sich diese anderen Programme in $ PATH befinden.
0

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

Dieser Code öffnet einen neuen Tab im Terminal, in dem ein Python-Skript ausgeführt wird. Wenn dieser Tab beendet ist, wird er nicht geschlossen, da ich am Ende dieses Codes 'bash' hinzugefügt habe.

Wenn Sie es mehrmals möchten, fügen Sie es in eine while-Schleife Ihres Bash-Skripts ein

Joao Vitor Deon
quelle