Anstatt meine Frage neu zu formulieren, möchte ich Ihnen den gewünschten Anwenderfall beschreiben:
Ich erstelle ein kurzes Shell-Skript, um den Befehl "gnome-terminal --someoptionflagname 'my text to be posted'" auszuführen, und führe dieses Skript aus.
Das Gnome-Terminal erscheint mit der Kommandozeile gefolgt von meinem Text.
dh: fields@mycomputer:/$ my text to be posted
Kann das gemacht werden?
xnee
jetzt.Antworten:
Sie können dies mit expect ( install ) tun . Erstellen und ausführbar machen
~/bin/myprompt
:und starte Gnome Terminal mit:
quelle
Wenn ich das richtig verstehe, soll Ihre erste Eingabezeile vorab mit Inhalten gefüllt werden, die Sie über die Gnome-Terminal-Befehlszeile übergeben.
Ich weiß nicht, wie ich genau das mit bash machen soll, aber hier ist etwas, das nahe kommt. Fügen Sie in Ihrer
~/.bashrc
Zeile ganz am Ende die folgende Zeile hinzu:Führen Sie aus
gnome-terminal -x env BASH_INITIAL_COMMAND='my text to be posted' bash
, und drücken Sie Upan der Eingabeaufforderung, um den Text abzurufen.Beachten Sie auch, dass, wenn Sie
set -o history
am Ende des.bashrc
Verlaufs einen Kommentar gefolgt von einem Kommentar einfügen, dieser beim Start der Bash in den Verlauf aufgenommen wird. Sie können ihn als Grundlage für die Bearbeitung verwenden, indem Sie ihn mit der UpTaste erreichen und den Anfangsbuchstaben entfernen#
.quelle
ændrüks Vorschlag ist sehr gut und hat für mich funktioniert, der Befehl ist jedoch im Skript fest codiert, und wenn Sie die Größe des Terminalfensters ändern, funktioniert er nicht gut. Unter Verwendung seines Codes als Basis habe ich die Möglichkeit hinzugefügt, dem myprompt-Skript den Befehl als Argument zu senden, und dieses Skript behandelt die Größenänderung des Terminalfensters korrekt.
und starte Gnome Terminal mit:
quelle
ændrüks Antwort ist in Ordnung, aber vielleicht ein bisschen schwergewichtig für die Aufgabe.
Hier ist ein Skript, das ein Skript basierend auf seinen Argumenten schreibt
Wenn Sie nicht viel Shell-Programmierung gemacht haben, scheint es hier mehr Magie zu geben als dort. Zuerst benenne ich eine temporäre Datei für das Skript, in der
$$
die Prozess-ID der Shell steht, in der dieses Skript ausgeführt wird. Die/tmp/something.$$
Metapher wird verwendet, wenn zwei Instanzen dieses Skripts gleichzeitig ausgeführt werden. Sie werden nicht versuchen, dieselbe temporäre Datei zu verwenden.Die Variable
$SHELL
wird auf den Namen der Shell gesetzt, auf der das Skript ausgeführt wird. Wenn Sie / usr / bin / bash verwenden, möchten Sie wahrscheinlich, dass das Miniskript es auch verwendet.Das
"$@"
ist ein Shell-Idiom für "interpoliere alle meine Argumente und zitiere sie, wenn nötig". Diese eigenartige Syntax bewirktdie Argumente als zwei Elemente zu interpolieren
anstelle der vier,
$@
die nachgeben würdenDie letzten Zeilen des Skripts sorgen dafür, dass ein Gnome-Terminal das Mini-Skript ausführt und anschließend eine interaktive Shell startet. Wenn das Gnome-Terminal beendet wird, wird das temporäre Skript entfernt, da die Müllablagerung nicht mehr korrekt ist.
Die letzte Zeile ist kein Teil des Miniskripts. Sie zeigt, dass das Miniskript funktioniert. Wenn sich das 11-Zeilen-Skript in einer Datei befindet, die aufgerufen
rt.sh
wird,chmod
macht die es ausführbar und dann wird es ausgeführt.Das Ergebnis all dessen ist ein Gnom-Terminal, das gestartet wird und angezeigt wird
in der ersten Zeile und startet dann eine interaktive Shell:
quelle
gnome-terminal -x sh -c "echo hello world; bash"
, was ich nicht für die Frage halte.Die beiden Antworten , die ich gemocht habe dies am besten zu lösen verwenden
expect
und diese , wo sie mit dem empfehlen--init-file
Flag entweder im shebang oder bei der Ausführung des Terminals:... und führe es aus als:
expect
ist wahrscheinlich die bessere Lösung (aus Gründen, die ich skizzieren werde), außer dass ich nicht kontrollieren kann, ob es in meiner Zielumgebung installiert ist.Das Problem , das ich lief in mit bash
--init-file
undgnome-terminal
ist--command
als ein Hack zu lösen diese die Schale haben keinen Zugriff auf STDIN während Init - Skripte ausgeführt werden . Wenn ich zum Beispiel etwas ausführen möchte, für das Benutzereingaben erforderlich wären (FTP, Telnet usw.), die übergeordnete Shell danach jedoch ausgeführt wird, funktioniert dies nicht. Die einzige Ausnahme, die ich bisher gesehen habe, ist ssh:... aber was ich brauche, ist komplizierter als dieses Spielzeugbeispiel. Wie auch immer, ich hoffe, das
--init-file
Zeug ist für jeden nützlich, der diese Frage liest.quelle
Sie können die Argumente
-e
oder verwenden-x
, um einen Befehl in einem neu aufgerufenen Terminal auszuführen, aber das ist nicht genau das, was Sie wollen.quelle