Birden çok terminal sekmesini açma ve komutu çalıştırma


9

Birden fazla terminal sekmesini açmam, onlara başlıklar vermem, bir dizine gitmem ve her sekmeyi bir komut çalıştırmam gerekiyor.

Linux ve kabuk komut dosyalarında yeniyim, çevrimiçi arama yaptıktan ve bazı çözümleri kontrol ettikten sonra, bu komut dosyasını yaptım ( aşağıdaki cevaplara dayanarak DÜZENLENDİ ):

#!/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

Sekmeleri açar, adlandırır, ancak bu hatayı oluşturan komutları yürütemez:

Bu terminal için alt süreç oluşturulurken bir hata oluştu

Başka bir eksiklik ise, çalışan komutu durdurursam, istemediğim sekmeyi kapatır. Komutu durdurup aynı sekmede tekrar çalıştırabilmem gerekiyor.

Senaryoda yanlış olan ne? Bunu yapmanın daha basit bir yolu var mı?

Not: (-e "\" bash -c $ {cmds [i]}; bash \ "") bölümünü komuttan kaldırırsam, belirtilen dizindeki sekmeleri açar ve hatasız olarak adlandırır.

-Düzenleme-1:

Aşağıdaki @Tuknutx yanıtı uyguladıktan ve komut dosyasını düzenledikten sonra hata artık görünmüyor, ancak bana veriyor bash: rails c: command not foundve rails sraylar sunucusunu başlatmak yerine yeni bir raylar uygulaması oluşturuyor, bu klasöre erişildiğinde bir gemset seçmek için .rmvrc kullanıyorum .


Betiğinizin ubuntu önyüklemenizde çalışmasını istiyorsanız: - betiğinizi bir uptart hizmeti ( help.ubuntu.com/community/UbuntuBootupHowto ) olarak çalıştırabilir veya: masaüstü ortamınızda "başlangıç ​​uygulamalarını" kullanarak
Aboelnour

ben yazmak cmds[1]="'ping 192.168.9.9'"bana aynı hatayı verir ama tek tırnak kaldırarak çözdü. Yani ben yazarsam cmds[1]="ping 192.168.9.9"çalışır.
papatya

@Brary ama neden üç sekme-bir varsayılan ve komut dosyasında ayarlanmış başka bir iki açar anlamıyorum. Çünkü tanımlıyoruz tab=" --tab-with-profile=Default"??
papatya

Yanıtlar:


3

Ben kullanarak öneriyoruz tmuxile tmuxinatoro olacak sizin için işi yapar, ve güvenebileceğiniz terminatordüzenleri de!

İçin terminatordüzen çıkış mhnagaoka cevabı burada Ask Ubuntu çok:

  1. Düzeninizi ayarladıktan sonra, herhangi bir terminal arka planına sağ tıklayın ve TercihlerDüzenler sekmesini seçin ve Ekle düğmesine tıklayın.

  2. Bir isim verin ve Kapat'a basın .

  3. Bu, söz konusu ~/.config/terminator/configdosyayı oluşturmalıdır .

  4. Artık terminatörü kaydedilen düzeni kullanarak aşağıdakileri kullanarak başlatabilirsiniz: terminator -l yourLayout( Düzeninizi 2. adımda seçtiğinizle değiştirin ).

  5. (isteğe bağlı) Düzen ~/.config/terminator/configdosya yazan yere böylece [layouts]ve altındaki iç içe [[yourLayout]], yeniden adlandırma yourLayout için varsayılan ve kaldırma / önceki adlandırmak varsayılan düzeni. Şimdi, Terminator herhangi bir parametre olmadan başladığında, özel [[default]]düzeninizi yükleyecektir !


2

Diğer cevapların ve yorumlarının bir kaçını özetlemek için, işte sonunda bulduğum şey:

#!/bin/bash

cd /path/of/my/stuff

tab=" --tab"
options=()

cmds[1]="echo Banana"

cmds[2]="echo Cat"


for i in 1 2; do
options+=($tab -e "bash -c '${cmds[i]} ; bash'" )
done

gnome-terminal "${options[@]}"

exit 0

'Ana' sekmesini, profilleri ve (kullanımdan kaldırılmış gibi görünen) başlıkları aldığımı unutmayın gnome-terminal.


Çıktı $tab -e... Option “-e” is deprecated and might be removed in a later version of gnome-terminal.seçenekleri sonlandırmak ve komut satırını yürütmek için “-” kullanın. . that's an output but the comands get executed. When i use $ sekmesi - `komut çalıştırılmaz ve terminal oynatılır: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)
nyxee

1

Bunu dene:

options+=($tab --title="${titles[i]}"  -e "bash -c \"${cmds[i]} ; bash\"" ) 

aksi halde -e'den sonraki tüm ifade komut olarak yorumlanır.

.Bashrc -icyerine takma ad eklemek içinc


Hata artık görünmüyor, teşekkürler. Ama bana veriyor bash: rails c: command not foundve 'raylar' raylar sunucusunu başlatmak yerine yeni bir raylar uygulaması oluşturur. Bu, sorunun kapsamını değiştirir, senaryo için ur modifikasyonu ile düzenleyeceğim
Brary

rails cBaşka bir şey olmadan bir terminalde denerseniz işe yaradı mı? Belki de olmalı rails -c?
TuKsn

Bu işe yaramadı denedim. Hatta denedim rvm list gemsetsve diyor ki No command 'rvm' found... rvm list gemsetsbir komut çalıştırmadan açılan ilk sekmesinde aynı komutu çalıştırın ve işe yaradı! ortam yüklenmeden ve .rvmrc dosyası yüklenmeden önce komutu çalıştırır mı?
Brary

1

-E seçeneğini verdiğiniz argüman "bash -c command; bash"tırnak içine alınmaktadır. Tüm dizeyi komutun adı olarak yorumlar! Onun yerine bunu deneyin: -e "bash -c 'command ; bash'". Bu şekilde terminal pencerenizde çalıştırılan şey olur commandve bundan sonra, istediğiniz bir şey olduğunu varsaydığım bir kız kabuğu verilir. Bu arada, ayrıca 'command & bash'; bu, komutu arka plan üzerinde çalıştıracak ve size kız kabuğunu hemen verecektir.


Ben bu değişti options+=($tab --title="${titles[i]}" -e "\"bash -c ${cmds[i]} ;bash\"" )içine options+=($tab --title="${titles[i]}" -e "\"bash -c '${cmds[i]} ;bash'\"" )ve eğer düzgün bir şekilde yapıyorum .. bana aynı hata verdi?
Brary

Tam olarak doğru değil: \ "ilk bash öncesi \" ve \ "ikinci bash sonrası".
Silvio Levy

Teşekkürler, soruyu düzenledim ve kapsamını raylar ve rvm içerecek şekilde değiştirdim.
Brary
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.