Daripada mengulangi pertanyaan saya, izinkan saya menjelaskan kepada Anda kasus pengguna yang diinginkan:
Saya membuat skrip shell pendek untuk menjalankan perintah "gnome-terminal --someoptionflagname 'teks saya untuk diposting'", dan jalankan skrip ini.
Gnome-terminal muncul, dengan prompt baris perintah diikuti oleh teks saya.
yaitu: fields@mycomputer:/$ my text to be posted
Bisakah ini dilakukan?
xnee
sekarang.Jawaban:
Anda dapat melakukan ini dengan ekspektasi ( instal ). Buat dan buat dapat dieksekusi
~/bin/myprompt
:dan jalankan Terminal Gnome dengan:
sumber
Jika saya mengerti dengan benar, Anda ingin jalur input pertama Anda diisi dengan isi yang Anda lewati pada baris perintah terminal gnome.
Saya tidak tahu bagaimana melakukan ini dengan bash, tapi ada sesuatu yang dekat. Di Anda
~/.bashrc
, tambahkan baris berikut di bagian paling akhir:Jalankan
gnome-terminal -x env BASH_INITIAL_COMMAND='my text to be posted' bash
, dan tekan Upsaat diminta untuk memanggil kembali teks.Perhatikan juga bahwa jika Anda meletakkan
set -o history
diikuti oleh komentar di akhir Anda.bashrc
, mereka akan dimasukkan ke dalam sejarah sebagai bash dimulai, sehingga Anda dapat menggunakannya sebagai dasar untuk mengedit dengan menjangkau mereka dengan Upkunci dan menghapus yang awal#
.sumber
Saran ændrük sangat baik dan bekerja untuk saya, namun perintah tersebut di-hardcod dalam skrip, dan jika Anda mengubah ukuran jendela terminal, itu tidak berfungsi dengan baik. Menggunakan kode-nya sebagai basis, saya telah menambahkan kemampuan untuk mengirim skrip myprompt perintah sebagai argumen, dan skrip ini dengan benar menangani mengubah ukuran jendela terminal.
dan jalankan Terminal Gnome dengan:
sumber
Jawaban ændrük baik-baik saja, tetapi mungkin sedikit berat untuk tugas itu.
Berikut adalah skrip yang menulis skrip berdasarkan argumennya
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 menyebabkanuntuk menginterpolasi argumen sebagai dua elemen
bukannya empat yang
$@
akan menghasilkanBaris 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
makachmod
membuatnya dapat dieksekusi dan kemudian dieksekusi.Hasil dari semua ini akan menjadi terminal gnome yang mulai, menampilkan
pada baris pertama dan kemudian memulai shell interaktif:
sumber
gnome-terminal -x sh -c "echo hello world; bash"
, yang menurut saya pertanyaannya tidak diajukan.Dua jawaban yang paling saya sukai untuk menyelesaikan ini adalah menggunakan
expect
dan yang ini di mana mereka merekomendasikan menggunakan--init-file
bendera baik di shebang atau ketika menjalankan terminal:... dan jalankan sebagai:
expect
mungkin solusi yang lebih baik (untuk alasan saya akan menguraikan), kecuali bahwa saya tidak dapat mengontrol apakah itu diinstal di lingkungan target saya.Masalahnya aku berlari ke dalam dengan bash
--init-file
dangnome-terminal
's--command
sebagai hack untuk mengatasi ini adalah shell tidak memiliki akses ke STDIN ketika menjalankan skrip init. Jika, misalnya, saya ingin menjalankan sesuatu yang memerlukan input pengguna (ftp, telnet, dll) tetapi biarkan shell induk berjalan setelah itu tidak akan berfungsi; satu-satunya pengecualian yang saya lihat sejauh ini adalah ssh:... tapi yang saya butuhkan lebih rumit dari contoh mainan ini. Ngomong-ngomong, saya berharap
--init-file
hal ini bermanfaat bagi siapa pun yang membaca pertanyaan ini.sumber
Anda dapat menggunakan argumen
-e
atau-x
untuk menjalankan perintah di dalam terminal yang baru muncul, tapi itu tidak persis seperti yang Anda inginkan.sumber