Begitu gnome-terminal sudah mulai bash, itu keluar dari loop sejauh menyangkut eksekusi perintah: itu hanya mengelola input dan output. Jadi, Anda perlu kerja sama bash untuk menjalankan sesuatu setelah ~/.bashrc
dimuat.
Pertama, dalam banyak kasus, Anda sebenarnya tidak perlu menjalankan perintah setelah itu ~/.bashrc
. Misalnya, membuka terminal di direktori tertentu dapat dilakukan dengan mudah cd /foo/bar && gnome-terminal
. Anda dapat mengatur variabel lingkungan dengan cara yang sama: VAR=value gnome-terminal
. (Jika Anda ~/.bashrc
menimpa variabel lingkungan, Anda salah melakukannya: definisi variabel lingkungan termasuk di~/.profile
dalamnya )
Untuk menjalankan perintah di terminal, tetapi sebelumnya ~/.bashrc
, Anda bisa melakukannya
gnome-terminal -x sh -c 'command1; command2; exec bash'
Jika Anda ingin menggunakan banyak tab, Anda harus menggunakan -e
alih-alih -x
. Gnome-terminal secara tidak membantu memecah argumen -e
pada spasi alih-alih mengeksekusi melalui shell. Meskipun demikian, Anda dapat menulis perintah shell jika Anda memastikan untuk tidak memasukkan spasi di dalamnya. Setidaknya dengan gnome-terminal 2.26, Anda dapat menggunakan tab, (ganti <TAB>
dengan karakter tab literal):
gnome-terminal -e 'sh -c command1;command2;exec<TAB>bash'
gnome-terminal --tab -e 'sh -c command1;<TAB>exec<TAB>bash' \
--tab -e 'sh -c command2;<TAB>exec<TAB>bash'
Jika Anda perlu menjalankan perintah setelah ~/.bashrc
, membuat ia menjalankan perintah. Misalnya, sertakan kode berikut di akhir ~/.bashrc
:
eval "$BASH_POST_RC"
Kemudian untuk menjalankan beberapa kode setelah (sungguh, di akhir) bashrc Anda:
gnome-terminal -x sh -c BASH_POST_RC=\''command1; command2'\''; exec bash'
atau (kurang berat pada kutipan)
BASH_POST_RC='command1; command2' gnome-terminal
Meskipun saya khususnya tidak merekomendasikan melakukannya dengan cara ini, Anda mungkin tertarik pada teknik yang disebutkan dalam
Cara memulai terminal dengan teks tertentu yang sudah dimasukkan pada baris perintah? .
gnome-terminal --geometry=198x44 --working-directory=/home/username/Workspace/project_name --tab --title server -e 'zsh -c "export BASH_POST_RC=\"rails server\"; exec zsh"' --tab --title console -e 'zsh -c "export BASH_POST_RC=\"rails console\"; exec zsh"'
gnome-terminal -e
tidak meminta shell sama sekali. Jika Anda menjalankangnome-terminal -e 'sleep 9'
, itu mengeksekusi perintahsleep
dengan argumen9
, dan tidak ada shell yang terlibat. Jika Anda mengeksekusignome-terminal -e 'sleep 9;bash'
maka terminal membuka dan menutup segera, karenasleep
mengeluh bahwa9;bash
itu bukan interval waktu yang valid. Anda dapat mengamati apa yang terjadi denganstrace -f -eexecve gnome-terminal -e …
Ketika Anda menggunakan
-e
opsi,gnome-terminal
perintah run akan dijalankan tanpa memulai shell baru (Anda bahkan dapat menjalankan sesuatu sepertignome-terminal -e gedit
:), jadi jika Anda ingin menjalankan perintah kebash
shell ke terminal / tab baru Anda harus melakukan sesuatu seperti ini:Tetapi perhatikan bahwa ketika
"command"
berakhir terminal / tab akan berakhir juga.sumber
gnome-terminal -x bash -c "command"
(-e
mengharapkan satu argumen). Dan itu cukup sederhana untuk mengeksekusi shell setelahcommand
, setidaknya selama Anda memulai satu tab - lihat jawaban saya .gnome-terminal -x "bash" -c "command"
bekerja untukku. Perhatikan kutipan pada nilai -x arg.# Option “-x” is deprecated and might be removed in a later version of gnome-terminal.
`-x
dan-e
opsi-opsi yang ditinggalkan ???~/.bashrc
sebelum menjalankan perintah, seperti yang awalnya ditanyakan oleh OP.