Jawaban ændrük baik-baik saja, tetapi mungkin sedikit berat untuk tugas itu.
Berikut adalah skrip yang menulis skrip berdasarkan argumennya
#!/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
Jika Anda tidak melakukan banyak pemrograman shell, tampaknya ada lebih banyak keajaiban di sini daripada yang ada. Pertama, saya beri nama file sementara untuk menyimpan skrip di mana $$
proses ID dari shell menjalankan skrip ini. The /tmp/something.$$
metafora digunakan dalam kasus dua contoh dari script ini dijalankan pada saat yang sama, mereka tidak akan mencoba untuk menggunakan file sementara yang sama.
Variabel $SHELL
diatur ke nama shell yang menjalankan skrip. Jika Anda menggunakan / usr / bin / bash, mungkin Anda ingin skrip mini juga menggunakannya.
Ini "$@"
adalah idiom shell untuk "menginterpolasi semua argumen saya, mengutipnya jika diperlukan". Sintaksis yang aneh ini menyebabkan
script.sh 'my file' your\ file
untuk menginterpolasi argumen sebagai dua elemen
"my file" "your file"
bukannya empat yang $@
akan menghasilkan
"my" "file" "your" "file"
Baris terakhir skrip mengatur terminal gnome untuk mulai menjalankan skrip mini dan kemudian memulai shell interaktif. Ketika terminal gnome keluar, skrip sementara dihapus karena membuang sampah sembarangan.
Baris terakhir bukan merupakan bagian dari skrip mini, ini menunjukkan bahwa skrip mini berfungsi. Jika 11 baris skrip di atas adalah dalam sebuah file bernama rt.sh
maka chmod
membuatnya dapat dieksekusi dan kemudian dieksekusi.
$ chmod +x rt.sh && ./rt.sh echo hello world
Hasil dari semua ini akan menjadi terminal gnome yang mulai, menampilkan
hello world
pada baris pertama dan kemudian memulai shell interaktif:
msw@myhost:~$