La risposta di ændrük va bene, ma forse un po 'pesante per il compito.
Ecco uno script che scrive uno script in base ai suoi argomenti
#!/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
Se non hai fatto molta programmazione della shell, qui sembra esserci più magia di quanta ce ne sia. Innanzitutto, desidero un file temporaneo per contenere lo script in cui si $$
trova l'ID del processo della shell che esegue questo script. Il/tmp/something.$$
metafora viene utilizzata nel caso in cui due istanze di questo script vengano eseguite contemporaneamente, non tenteranno di utilizzare lo stesso file temporaneo.
La variabile $SHELL
è impostata sul nome della shell che esegue lo script. Se usi / usr / bin / bash, presumibilmente vorresti che anche il mini-script lo usasse.
Il "$@"
è un linguaggio di shell per "interpolare tutte le mie argomentazioni, citando loro, se necessario". Questa peculiare sintassi causa
script.sh 'my file' your\ file
per interpolare gli argomenti come due elementi
"my file" "your file"
invece dei quattro che $@
avrebbero ceduto
"my" "file" "your" "file"
Le ultime righe dello script prevedono che un terminale gnome inizi a eseguire il mini-script e quindi a avviare una shell interattiva. Quando lo gnome-terminal esce, lo script temporaneo viene rimosso perché i rifiuti non sono freddi.
L'ultima riga non fa parte del mini-script, dimostra che il mini-script funziona. Se lo script di 11 righe sopra si trova in un file chiamato, rt.sh
lo chmod
rende eseguibile e quindi viene eseguito.
$ chmod +x rt.sh && ./rt.sh echo hello world
Il risultato di tutto ciò sarà un terminale GNOME che si avvia, visualizza
hello world
sulla sua prima riga e quindi avvia una shell interattiva:
msw@myhost:~$