æ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
#!/bin/sh
# terminal-plus-command: start a subordinate terminal which runs
# the interactive shell after first running the command arguments
tmpscript=/tmp/tmpscript.$$
echo "#!$SHELL" > $tmpscript
echo "$@" >> $tmpscript
echo exec "$SHELL" >> $tmpscript
chmod +x $tmpscript
gnome-terminal --command $tmpscript
rm -f $tmpscript
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 bewirkt
script.sh 'my file' your\ file
die Argumente als zwei Elemente zu interpolieren
"my file" "your file"
anstelle der vier, $@
die nachgeben würden
"my" "file" "your" "file"
Die 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.
$ chmod +x rt.sh && ./rt.sh echo hello world
Das Ergebnis all dessen ist ein Gnom-Terminal, das gestartet wird und angezeigt wird
hello world
in der ersten Zeile und startet dann eine interaktive Shell:
msw@myhost:~$