it-swarm.com.de

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

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.).

138
JSBach
gnome-terminal -e command

oder

xterm -e command

oder

konsole -e command

Ja schon

terminal -e command

So bleibt das Terminal beim Beenden des Befehls erhalten:

In der Konsole gibt es ein --noclose Flag.

In xterm gibt es ein -hold -Flag.

Gehen Sie in gnome-terminal zu Bearbeiten -> Profileinstellungen -> Titel . Klicken Sie auf die Registerkarte Command . Wählen Sie Halten Sie das Terminal 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 = NAMEOFHEPROFILE -e  command 
135
nickguletskii

Verwenden Sie das Alternatives-System, anstatt gnome-terminal, konsole usw. fest zu codieren. Das Programm, das den Standard-Terminalemulator ausführt, ist:

x-terminal-emulator

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 Option -e zum Ausführen eines Befehls zu unterstützen (ich habe sie für konsole und gnome-terminal überprüft). 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:

#!/bin/sh
"[email protected]"
exec "$Shell"

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

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 früherer Versuch, ein Skript in einem neuen Terminalfenster auszuführen, ist in Revision 2 zu finden, bevor mir klar wurde, dass Argumente an x-terminal-emulator übergeben werden können.

57
Lekensteyn

Recht einfach-

#!/bin/bash

/etc/init.d/ccpd status

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 laufen

#!/bin/bash

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

Der andere Beitrag wollte [] ein Platzhalter sein

Hier ist "NAMEOFTHEPROFILE" durch den Namen des Profils zu ersetzen, das "das Terminal hält, wenn der Befehl beendet wird".

enter image description here

enter image description here

9
Karthik T

Unterstützt von @ nickguletskiis Antwort und meinem eigenen Kommentar unter seiner Antwort und inspiriert von @ grabantots Aufwertung meines Kommentars, ist hier meine bevorzugte Methode, dies zu tun, insbesondere wenn ich möchte, dass das Terminal offen bleibt, damit ich kann es dann manuell verwenden.

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 ausgedachtes Beispiel, das eine einzelne Registerkarte öffnet, sie als "Test" bezeichnet und dann den einfachen Befehl cd /etc; ls darin ausführt. Der $Shell -Teil am Ende zwingt die Shell, offen zu bleiben, damit Sie ihre Ausgabe sehen und weiter verwenden können (das habe ich irgendwo anders bei Stack Overflow gelernt):

gnome-terminal --tab --title="test" --command="bash -c 'cd /etc; ls; $Shell'"

Hier ist ein etwas komplizierteres Beispiel, das 3 verschiedene Tabs im selben Gnome-Terminal öffnet. Dies ist genau die Art von Aktion, die meine Desktop-Verknüpfung ausführt, damit ich eine Reihe von Programmierfenstern gleichzeitig öffnen kann:

gnome-terminal --tab --title="tab 1" --command="bash -c 'cd /etc; ls; $Shell'" --tab --title="tab 2" --command="bash -c 'cd ~; ls; $Shell'" --tab --title="tab 3" --command="bash -c 'cd ~/temp3; ls; $Shell'"

Hier ist eine Aufschlüsselung des obigen Befehls:

  • gnome-terminal = Öffne ein Gnome-Terminal
  • --tab = Öffnet eine eindeutige Registerkarte für die nächsten Schritte
  • --title="tab 1" = Titel dieser Registerkarte "Registerkarte 1"
  • --command="bash -c 'cd /etc; ls; $Shell'" = Führe den Befehl bash -c 'cd /etc; ls; $Shell' aus. Dies ist ein Befehl, den ich mir gerade als Beispiel ausgedacht habe. Hier ist was es tut:
    • bash -c sagt, es sei ein Bash-Befehl
    • cd /etc = 'c'hange' d'irectory in den Pfad "/ etc"
    • ls = 'Der Inhalt dieses Verzeichnisses ist nicht vorhanden
    • $Shell = Dieses 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. :)
  • wir beginnen dann wieder mit dem Teil --tab, um Tab 2 und dann noch einmal Tab 3 zu erzeugen. Passen Sie ihn nach Herzenslust an.

Bildschirmfoto:

enter image description here

5
Gabriel Staples

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

hacky_function()
{
"[email protected]"
exec "$Shell"
}

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

1
Sruli