Odpowiedź ændrüka jest dobra, ale może trochę ciężka do zadania.
Oto skrypt, który pisze skrypt na podstawie swoich argumentów
#!/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
Jeśli nie wykonałeś dużo programowania powłoki, wydaje się, że jest tu więcej magii niż jest. Najpierw nazywam plik tymczasowy do przechowywania skryptu, gdzie $$
jest identyfikator procesu powłoki uruchamiającej ten skrypt. The/tmp/something.$$
Metafora jest stosowana w przypadku dwóch wystąpień tego skryptu są uruchamiane w tym samym czasie, nie będzie próbował użyć tego samego pliku tymczasowego.
Zmienna $SHELL
jest ustawiona na nazwę powłoki uruchamiającej skrypt. Jeśli używasz / usr / bin / bash, prawdopodobnie chcesz, aby mini-skrypt również z niego korzystał.
Jest "$@"
to idiom powłoki „interpoluj wszystkie moje argumenty, w razie potrzeby przytaczając je”. Ta szczególna składnia powoduje
script.sh 'my file' your\ file
interpolować argumenty jako dwa elementy
"my file" "your file"
zamiast czterech, które $@
by się poddały
"my" "file" "your" "file"
Ostatnie wiersze skryptu określają, że terminal gnome uruchamia mini-skrypt, a następnie uruchamia interaktywną powłokę. Kiedy gnome-terminal kończy pracę, skrypt tymczasowy jest usuwany, ponieważ śmiecenie jest niestosowne.
Ostatni wiersz nie jest częścią mini-skryptu, pokazuje, że mini-skrypt działa. Jeśli powyższy 11-wierszowy skrypt znajduje się w pliku o nazwie, rt.sh
to chmod
powoduje, że jest wykonywalny, a następnie jest wykonywany.
$ chmod +x rt.sh && ./rt.sh echo hello world
Wynikiem tego wszystkiego będzie terminal gnome, który się uruchomi
hello world
w pierwszym wierszu, a następnie uruchamia interaktywną powłokę:
msw@myhost:~$