Ich habe drei Skripte, die ich ausführen muss, wenn ich meinen Ubuntu-Rechner starte. Sie starten Dienste, die ich in meiner Entwicklungsumgebung verwende.
Dazu öffne ich manuell drei Terminals und gebe die Befehle ein.
Gibt es eine Möglichkeit, ein Skript zu erstellen, das drei Terminals öffnet und jeweils einen Befehl ausführt? (Jeder Befehl sollte sich in einem separaten Terminalfenster befinden, damit ich ihre Ausgabe sehen kann.)
quelle
gnome-terminal -e command
funktioniert nur, wenn angegebencommand
ist. So funktioniert das nicht:gnome-terminal -e "echo hello world; sleep 3"
aber dies tut:gnome-terminal -e "bash -c 'echo hello world; sleep 3'"
. Seufzer.; $SHELL
am Ende des Befehls etwas hinzufügen . Bsp .:gnome-terminal --tab --title="test" --command="bash -c 'cd /etc; ls; $SHELL'"
Statt Hartcodierung
gnome-terminal
,konsole
et cetera, verwenden Sie das System - Alternativen. Das Programm, das den Standard-Terminalemulator ausführt, ist:Auf meinem System wird jedes Mal, wenn ich diesen Befehl ausführe, eine neue Instanz von Konsole geöffnet.
Glücklicherweise scheinen die Terminals die
-e
Option zur Ausführung eines Befehls zu unterstützen (ich habe es fürkonsole
und überprüftgnome-terminal
). Argumente nach dem Befehl werden an den aufgerufenen Befehl übergeben. Bash weigert sich, in meinem Terminal offen zu bleiben, ein zusätzliches Skript wird benötigt, um ein Terminal zu erhalten:Wenn Sie das vorherige Skript als gespeichert
/home/user/hacky
und ausführbar gemacht haben, würden Sie Ihre Skripte ausführen mit:Der vollständige Pfad ist erforderlich und
/home/user/hacky
muss ausführbar sein.Mein früherer Versuch, ein Skript in einem neuen Terminalfenster auszuführen, war in Revision 2 zu finden , bevor mir klar wurde, dass Argumente übergeben werden können
x-terminal-emulator
.quelle
bash
) ausführen können oder eine Zeile wieread -p "Press Return to continue"
.cd xxx && start.sh
. Der Interpret sieht das && als den zweiten Teil des Befehls (was logisch ist), aber wenn ich es zitiere, dann versucht er, das Ganze als ein einziges großes ArgumentRecht einfach-
Dies ist ausreichend für andere Befehle, die im Terminal nichts anzeigen müssen. Hier muss aber der Status angezeigt werden.
Es muss also in einem Terminalfenster ausgeführt werden
Der andere Beitrag sollte
[]
ein Platzhalter seinHier ist "NAMEOFTHEPROFILE" durch den Namen des Profils zu ersetzen, das "das Terminal hält, wenn der Befehl beendet wird".
quelle
[]
war nur Platzhalter--window-with-profile=NAMEOFTHEPROFILE
Ich muss nur noch hinzufügen , was ich gegeben habeUnterstützt von @ nickguletskiis Antwort und meinem eigenen Kommentar unter seiner Antwort und inspiriert von @ grabantots Aufwertung meines Kommentars, ist dies meine bevorzugte Methode, besonders wenn ich möchte, dass das Terminal geöffnet bleibt, damit ich es dann manuell verwenden kann.
Ex. Verwendung: Dies ist sehr nützlich, um Ihre Startprogramme zu erweitern, damit dieses Skript ausgeführt, ein Terminal geöffnet, eine Registerkarte im Terminal erstellt und benannt und ein Befehl für Sie ausgeführt wird. Sie können auch einfach einen Symlink zu diesem Skript auf Ihrem Desktop hinzufügen. Ich benutze diesen Ansatz, um auf ein einzelnes Symbol auf meinem Desktop zu doppelklicken und es eine Reihe von Terminals (mit verschiedenen Registerkarten, die nach der Arbeit benannt sind, die ich in ihnen ausführen werde) und einzurichtenden Programmen öffnen zu lassen Meine Programmierumgebung zum Beispiel für die tägliche Arbeit.
Hier ist ein Beispiel, das einen einzelnen Tab öffnet, ihn als "Test" bezeichnet und dann den darin enthaltenen einfachen Befehl
cd /etc; ls
ausführt. Der$SHELL
Teil am Ende zwingt die Shell, offen zu bleiben, damit Sie ihre Ausgabe sehen und sie weiter verwenden können (das habe ich irgendwo anders bei Stack Overflow gelernt):Hier ist ein etwas komplizierteres Beispiel, das 3 verschiedene Tabs im selben Gnome-Terminal öffnet. Genau das macht meine Desktop-Verknüpfung, damit ich eine Reihe von Programmierfenstern gleichzeitig öffnen kann:
Hier ist eine Aufschlüsselung des obigen Befehls:
gnome-terminal
= Öffne ein Gnome-Terminal--tab
= öffne eine einzigartige Registerkarte für das, was als nächstes kommt--title="tab 1"
= Titel dieses Tabs "Tab 1"--command="bash -c 'cd /etc; ls; $SHELL'"
= führe denbash -c 'cd /etc; ls; $SHELL'
Befehl aus, den ich mir gerade als Beispiel ausgedacht habe; Das macht es:bash -c
sagt, es ist ein Bash-Befehlcd /etc
= 'c'hange' d'irectory in den "/ etc" Pfadls
= 'Der Inhalt dieses Verzeichnisses ist nicht vorhanden$SHELL
= Dieser kryptische Leckerbissen wird benötigt, um die Shell offen zu halten, damit Sie damit arbeiten können. Wenn Sie möchten, dass die Shell geöffnet wird, führen Sie Ihren Befehl aus und schließen Sie ihn. Entfernen Sie einfach diesen Teil. Ich möchte jedoch, dass die Registerkarte geöffnet bleibt, damit ich die Programmierung magisch gestalten kann. :)--tab
Teil, um Tab 2 zu produzieren, und dann noch einmal für Tab 3. Passen Sie es nach Herzenslust an.Bildschirmfoto:
quelle
Kommentar für die Antwort von Lekensteyn. Ich weiß, dass dies ein alter Beitrag ist, aber für alle, die dies nützlich finden (wie ich es gerade getan habe), anstatt ein anderes "Hacky-Skript" zu erstellen, indem Sie einfach eine Funktion in das Skript einfügen, das Sie aufrufen
Rufen Sie Ihr Skript mit den optionalen Argumenten "x-terminal-emulator -e / path / to / script hacky_function here" auf.
Vergessen Sie nicht, "$ @" am Ende des Skripts einzufügen
quelle
Verwenden Sie den Befehl screen und -d, um die Verbindung zu einer vorhandenen Bildschirmsitzung zu trennen, und fügen Sie hier erneut Folgendes hinzu: -m Erzwinge eine neue Bildschirmsitzung -S erstelle eine benannte Sitzung, anstatt den Standardnamen zu verwenden
quelle