La réponse d'ændrük est bonne, mais peut-être un peu lourde pour la tâche.
Voici un script qui écrit un script basé sur ses arguments
#!/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
Si vous n'avez pas fait beaucoup de programmation shell, il semble y avoir plus de magie ici qu'il n'y en a. Tout d'abord, je nomme un fichier temporaire pour contenir le script où $$
est l'ID de processus du shell exécutant ce script. La /tmp/something.$$
métaphore est utilisée dans le cas où deux instances de ce script sont exécutées en même temps, elles n'essaieront pas d'utiliser le même fichier temporaire.
La variable $SHELL
est définie sur le nom du shell exécutant le script. Si vous utilisez / usr / bin / bash, vous aimeriez probablement que le mini-script l'utilise également.
C'est "$@"
un idiome shell pour "interpoler tous mes arguments, en les citant si nécessaire". Cette syntaxe particulière provoque
script.sh 'my file' your\ file
pour interpoler les arguments en deux éléments
"my file" "your file"
au lieu des quatre qui $@
donneraient
"my" "file" "your" "file"
Les dernières lignes du script permettent à un gnome-terminal de démarrer le mini-script, puis de démarrer un shell interactif. Lorsque le gnome-terminal se ferme, le script temporaire est supprimé car le détritus n'est pas cool.
La dernière ligne ne fait pas partie du mini-script, elle démontre que le mini-script fonctionne. Si le script de 11 lignes ci-dessus se trouve dans un fichier appelé, rt.sh
le chmod
rend exécutable et ensuite il est exécuté.
$ chmod +x rt.sh && ./rt.sh echo hello world
Le résultat de tout cela sera un terminal gnome qui démarre, affiche
hello world
sur sa première ligne puis démarre un shell interactif:
msw@myhost:~$