Frage Wie kann ich ein Skript erstellen, das Terminalfenster öffnet und Befehle in ihnen ausführt?


Ich habe drei Skripte, die ich ausführen muss, wenn ich meine Ubuntu-Maschine starte, sie starten Dienste, die ich in meiner Entwicklungsumgebung verwende.

Um das zu tun, ö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 in einem separaten Terminal-Fenster sein, damit ich ihre Ausgabe sehen kann).


111
2018-06-02 19:58


Ursprung




Antworten:


gnome-terminal -e Befehl

oder

xterm -e Befehl

oder

konsole -e Befehl

Ziemlich viel

Terminal -e Befehl

Um das Terminal zu halten, wenn der Befehl beendet wird:

In der Konsole gibt es ein --noclose Flagge.

In Xterm gibt es ein -hold Flagge.

Im gnome-terminal, gehe zu Bearbeiten -> Profileinstellungen -> Titel. Drücke den Befehl Tab. Wählen Halte das Terminal fest aus dem Dropdown-Menü mit der Bezeichnung Wenn der Befehl beendet wird. Sie sollten dafür ein neues Profil anlegen und mit ausführen

gnome-terminal --window-with-profile =NAMEODERPROFIL -e Befehl

112
2018-06-02 20:03



Wenn ich versuche, das Terminal zu halten, bekomme ich "Child Prozess normal beendet mit Status Code 127" - Darshan Chaudhary
Gnome-Terminal hat die Titeloption nicht mehr :( - törzsmókus
@ törzsmókus Es funktioniert in Ubuntu 14.04 mit gnome-terminal 3.6.2. Welche Distribution und Version von Gnome-Terminal verwenden Sie? - bhass1
16.04 LTS, Gnome-Terminal 3.18.3. @ bhass1 es ist 2017 ... - törzsmókus
@ törzsmókus ist es in der Tat 2017! LTS-Releases haben ein 5-Jahres-Support-Leben. 14.04 endet erst im April 2019. wiki.ubuntu.com/Releases - bhass1


Anstatt hart zu codieren gnome-terminal, konsoleund so weiter, verwenden Sie das Alternatives-System. Das Programm, das den Standardterminal-Emulator ausführt, ist:

x-terminal-emulator

Auf meinem System öffnet es jedes Mal eine neue Instanz von Konsole, wenn ich diesen Befehl ausführe.

Zum Glück scheinen die Terminals das zu unterstützen -e Option zum Ausführen eines Befehls (ich habe es überprüft für konsole und gnome-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 bekommen:

#!/bin/sh
"$@"
exec "$SHELL"

Wenn Sie das vorherige Skript als gespeichert haben /home/user/hacky und machte es ausführbar, würden Sie Ihre Skripte mit ausführen:

x-terminal-emulator -e /home/user/hacky your-script optional arguments here

Der vollständige Pfad ist erforderlich und /home/user/hacky muss ausführbar sein.

Mein vorheriger Versuch, ein Skript in einem neuen Terminalfenster auszuführen, finden Sie in Revision # 2Es war bevor ich erkannte, dass Argumente weitergegeben werden können x-terminal-emulator.


47
2018-06-02 20:29



In diesem Fall wird es nicht viel helfen, da der Fragesteller etwas tun möchte, das nicht für alle Endgeräte gleich ist. - nickguletskii
Versuch # 3: dieser sollte das Terminal offen halten und das Programm mit optionalen Argumenten ausführen. - Lekensteyn
Ich habe gnome Option, aber sobald ich mein Skript ausführen, schließt das Hauptterminal !! .. irgendeine Idee warum? - Suda.nese
@ Suda.Nese Das ist von Entwurf, wenn das "Terminal" fertig ist das Ausführen des Skripts wird es beenden, weil es nichts mehr zu tun gibt. Sie können dies "reparieren", indem Sie eine Shell aufrufen, in der Sie Befehle ausführen können (bash) oder eine Zeile wie read -p "Press Return to continue". - Lekensteyn
Wie können Sie mehr als einen Befehl im Terminal ausführen? Beispielsweise cd xxx && start.sh. Der Interpreter sieht das && als zweiten Teil des Befehls (was logisch ist), aber wenn ich es zitiere, dann versucht es, das Ganze als ein großes Argument auszuführen - Richard


Recht einfach-

#!/bin/bash

/etc/init.d/ccpd status

Dies ist genug für andere Befehle, die nichts im Terminal anzeigen müssen. Aber hier muss man den Status angezeigt sehen.
Also muss es in einem Terminalfenster laufen

#!/bin/bash

gnome-terminal -e "/etc/init.d/ccpd status"  --window-with-profile=NAMEOFTHEPROFILE

Der andere Beitrag beabsichtigt [] ein Platzhalter sein

Hier soll "NAMEOFTHEPROFILE" durch den Namen des Profils ersetzt werden, dass "das Terminal beim Beenden des Befehls hält".

enter image description here

enter image description here


7
2018-01-23 09:31



@cipricus ich glaube [] war nur Platzhalter - Karthik T
Ich habs. aber ich muss das Terminal nicht so schnell schließen lassen. Ich denke, das ist auch in der verknüpften Frage - cipricus
@cipricus hast du das Profil ausprobiert? Ich muss nur hinzufügen --window-with-profile=NAMEOFTHEPROFILE zu dem, was ich gegeben habe - Karthik T
@cipricus Ich müsste nach Hause zurückkehren, um bessere Anweisungen zu geben, aber die Idee ist, ein spezielles Profil mit diesem Optionssatz zu erstellen und den Namen des speziellen Profils oben zu verwenden. - Karthik T
@cipricus wenn dir das reicht, dann ist das ok. Profil ist nichts weiter als eine Gruppe von Einstellungen. Sie können die Einstellungen NUR für die Verwendung in Ihrem Skript einrichten und müssen sie nicht in allen Terminals verwenden. Sie können Bearbeiten -> Profile sehen, um alle Profile zu sehen, die Sie haben, und Sie würden eine hinzufügen, die wie in dem Beitrag, den Sie verlinkt haben, eingerichtet wurde - Karthik T


Kommentieren für die Antwort von Lekensteyn. Ich weiß, das ist ein alter Post, aber für jeden, der das nützlich findet (wie ich es gerade getan habe) Anstatt ein weiteres "Hacky-Skript" zu erstellen, fügen Sie einfach eine Funktion in das Skript ein, das Sie aufrufen

hacky_function()
{
"$@"
exec "$SHELL"
}

Rufen Sie Ihr Skript mit "x-terminal-emulator -e / path / to / script hacky_function optionale Argumente hier" auf

Vergessen Sie nicht, "$ @" am Ende des Skripts zu setzen


1
2017-12-06 20:11





Benutze die Bildschirmbefehl und -d Von einer bestehenden Bildschirmsitzung trennen und hier erneut anhängen -m erzwinge eine neue Bildschirmsitzung -S Erstellen Sie eine benannte Sitzung, anstatt den Standardnamen zu verwenden


-2
2018-04-13 20:00



Diese Antwort ist nicht klar, bitte sorgen Sie dafür, dass sie verständlicher wird - azerafati
@ Azerafati in der Tat, Bildschirm öffnet kein Terminal-Fenster ... ist nicht einmal von diesem tollen Paket beabsichtigt ... - erm3nda