Saya perlu membuka banyak tab terminal, memberi mereka judul, pergi ke direktori, dan membuat setiap tab menjalankan perintah.
Saya baru mengenal Linux dan skrip shell, setelah mencari secara online dan memeriksa beberapa solusi, saya membuat skrip ini ( Diedit berdasarkan jawaban di bawah):
#!/bin/bash
cd /media/Extra/Project
tab=" --tab-with-profile=Default"
options=(--tab --title=Terminal)
cmds[1]="'rails s'"
titles[1]="Server"
cmds[2]="'rails c'"
titles[2]="Console"
for i in 1 2; do
options+=($tab --title="${titles[i]}" -e "bash -c \"${cmds[i]} ; bash\"" )
done
gnome-terminal "${options[@]}"
exit 0
Ini membuka tab, menamai mereka, tetapi gagal menjalankan perintah yang menghasilkan kesalahan ini:
Terjadi kesalahan saat membuat proses anak untuk terminal ini
Kelemahan lain adalah bahwa jika saya menghentikan perintah yang sedang berjalan itu menutup tab, yang saya tidak mau. Saya harus dapat menghentikan perintah dan menjalankannya lagi di tab yang sama.
Apa yang salah dengan skrip? Apakah ada cara lain yang lebih sederhana untuk melakukan itu?
Catatan: Jika saya menghapus bagian (-e "\" bash -c $ {cmds [i]}; bash \ "") dari perintah, ia membuka tab di direktori yang diberikan dan menamainya, tanpa kesalahan.
-Edit-1:
Setelah menerapkan @Tuknutx jawaban di bawah ini dan mengedit skrip, kesalahan tidak muncul lagi, tetapi itu memberi saya bash: rails c: command not found
dan rails s
membuat aplikasi rel baru alih-alih memulai server rel, saya menggunakan .rmvrc untuk memilih permata setelah folder ini diakses .
cmds[1]="'ping 192.168.9.9'"
itu memberi saya kesalahan yang sama tetapi saya menyelesaikannya dengan menghapus kutip tunggal. Jadi jika saya tuliscmds[1]="ping 192.168.9.9"
itu berfungsi.tab=" --tab-with-profile=Default"
??Jawaban:
Saya akan merekomendasikan menggunakan
tmux
dengantmuxinator
, itu akan melakukan pekerjaan untuk Anda, dan Anda dapat mengandalkanterminator
tata letak juga!Untuk
terminator
checkout tata letak jawaban mhnagaoka di sini askubuntu juga:sumber
Untuk merangkum beberapa jawaban lain dan komentar mereka, inilah yang akhirnya saya sampaikan:
Perhatikan bahwa saya mengambil tab 'master', dan profil, dan judul (yang tampaknya sudah usang
gnome-terminal
).sumber
$tab -e...
Option “-e” is deprecated and might be removed in a later version of gnome-terminal.
`Use“ - ”untuk mengakhiri opsi dan menempatkan baris perintah untuk mengeksekusi setelahnya.. that's an output but the comands get executed. When i use
$ tab - `perintah tidak dieksekusi dan terminal dsisplays:There was an error creating the child process for this terminal. Failed to execute child process “bash -c 'echo Banana ; bash'” (No such file or directory)
Coba ini:
jika tidak seluruh ekspresi setelah -e akan ditafsirkan sebagai perintah.
Untuk memasukkan alias dari penggunaan .bashrc
-ic
alih-alihc
sumber
bash: rails c: command not found
dan 'rails' menciptakan aplikasi rail baru alih-alih memulai server rails. Ini mengubah ruang lingkup pertanyaan, saya akan mengeditnya dengan modifikasi skrip Andarails c
terminal tanpa yang lain? Mungkin seharusnya begiturails -c
?rvm list gemsets
dan dikatakanNo command 'rvm' found
.. jalankan perintah yang samarvm list gemsets
di tab pertama yang terbuka tanpa menjalankan perintah dan itu berhasil! apakah itu menjalankan perintah sebelum lingkungan memuat dan file .rvmrc dimuat?Argumen yang Anda berikan opsi -e adalah
"bash -c command; bash"
termasuk tanda kutip. Itu mengartikan seluruh string sebagai nama perintah! Coba ini sebagai gantinya:-e "bash -c 'command ; bash'"
. Dengan cara ini apa yang dijalankan pada jendela terminal Andacommand
, dan setelah itu berjalan, Anda akan diberi shell anak, yang saya asumsikan adalah yang Anda inginkan. Kebetulan, Anda juga bisa mengatakan'command & bash'
; ini akan menjalankan perintah di latar belakang dan memberi Anda shell putri segera.sumber
options+=($tab --title="${titles[i]}" -e "\"bash -c ${cmds[i]} ;bash\"" )
menjadioptions+=($tab --title="${titles[i]}" -e "\"bash -c '${cmds[i]} ;bash'\"" )
dan itu memberi saya kesalahan yang sama .. apakah saya melakukannya dengan benar?