[Kapalı] komut satırını kullanarak gnome-terminalde yeni bir sekme açın


122

Ubuntu 9.04 x64 kullanıyorum ve yazdığımda:

gnome-terminal --tab

Terminalde, aynı terminal penceresinde yeni bir sekme açmasını bekliyorum. Ancak bunun yerine yeni bir pencere açar.

Niyetinin yeni bir pencerede yeni bir sekme açmak olduğunu öğrendim, yani şunu yazarsam:

gnome-terminal --tab --tab

İki sekmeli yeni bir pencere açılacaktır.

Öyleyse, soru şu ki, içindeki bir komutu kullanarak mevcut pencerede yeni bir sekme nasıl açabilirim gnome-terminal?


4
Yine de gnome-terminal yazıyorsanız, neden yeni bir sekme açmak için ctrl + shift + t tuşlarına
basamıyorsunuz

13
Ve Ctrl+Shift+Tkomut bir betik dosyasından çalıştırılırken nasıl basmalıyım ? (D-Bus denen bir şeyin bunu yapabileceğini duydum)!
Vikrant Chaudhary

19
Bilgisayarımı her başlattığımda, gnome terminalimde birkaç sekme açmam gerekiyor. Ve bunu otomatikleştirmek kendimi biraz daha inek gibi hissetmemi sağlayacak. (Dedikleri gibi) Tembellik bir programcının özelliğidir.
Vikrant Chaudhary

@VikrantChaudhary threevirtues.com :-)
jpaugh

Stack Overflow, programlama ve geliştirme soruları için bir sitedir. Bu soru, programlama veya geliştirme ile ilgili olmadığı için konu dışı görünüyor. Burada , Yardım Merkezinde hangi konular hakkında soru sorabilirim konusuna bakın . Belki Süper Kullanıcı veya Unix ve Linux Yığın Değişimi sormak için daha iyi bir yer olabilir.
jww

Yanıtlar:


70
#!/bin/sh

WID=$(xprop -root | grep "_NET_ACTIVE_WINDOW(WINDOW)"| awk '{print $5}')
xdotool windowfocus $WID
xdotool key ctrl+shift+t
wmctrl -i -a $WID

Bu, ilgili terminali otomatik olarak belirleyecek ve sekmeyi buna göre açacaktır.


3
Teşekkürler, iyi çalışıyor. Uygun biçimde -WID= xprop -root | grep "_NET_ACTIVE_WINDOW(WINDOW)"| awk '{print $5}'; xdotool windowfocus $WID; xdotool key ctrl+shift+t $WID
Vikrant Chaudhary

6
Çözüm için teşekkürler. Yine de, farklı sekmelerde farklı komutları nasıl çalıştırabileceğim bana açık değil. Komutları nereye eklersem eklemem, hepsi ilk sekmede çalıştırılır. Bunun için bir çözüm ekleyebilir misiniz?
Calin

10
@Calin sleep 1; xdotool type --delay 1 --clearmodifiers "your Command"; xdotool key Return;bir komutu çalıştırmak için kullanın.
user13107

2
Neden WID ve pencere odak biti? Pencereye zaten odaklanılmayacak mı?
Chris Morgan

1
Bu senaryoyu nereye yerleştirmeliyim?
Dawoodjee

69

Ayrıca her sekmenin bir set komutu çalıştırmasını da sağlayabilirsiniz.

gnome-terminal --tab -e "tail -f somefile" --tab -e "some_other_command"

11
Ben cevaben 'Bu terminali için çocuk sürecini oluştururken bir hata oluştu' olsungnome-terminal --tab -e "cd /tmp"
Hedgehog

3
@Hedgehog, bunun için bir yol var: gnome-terminal --tab --working-directory="/home/user/X/Y/". Neden bilmiyorum ama "~/X/Y/"işe yaramadı.
glarrain

1
Komutlarımla sorun yaşıyorum, sadece --tab kullanırsam işe yarıyor ama --tab -e "my_bash_shorcut" kullanıyorsam çalışmıyor. Neden biliyor musun?
Adrian Matteo

@AdrianMatteo Biraz geç, ama sanırım anladım: anlamsız iki dosya oluşturur ve sonra bu komutu çalıştırırsanız gnome-terminal --tab -e "tail -f file_a" --tab -e "tail -f file_b", gnome terminali, her sekmenin ilgili dosya içeriğine sahip olacağı iki sekme ile açılır, ancak an ^ C gönder. Bu size neden işe yaramadığını gösteriyor, ancak bunu nasıl düzelteceğimi bilmiyorum.
IDDQD


8

En basit yolu buldum:

gnome-terminal --tab -e 'command 1' --tab -e 'command 2'

tmuxDoğrudan terminal kullanmak yerine kullanıyorum. Bu yüzden tek ve basit bir komut / kabuk dosyası istediğim, geliştirmeyi envbirkaç tmuxpencere ile inşa etmek . Kabuk kodu aşağıdaki gibidir:

#!/bin/bash
tabs="adb ana repo"
gen_params() {

    local params=""
    for tab in ${tabs}
    do  
        params="${params} --tab -e 'tmux -u attach-session -t ${tab}'"
    done
    echo "${params}"
}
cmd="gnome-terminal $(gen_params)"
eval $cmd

Bu alıntılar 'command 1', yalnızca ben de belirttiğimde işe yarayan çift alıntılardan daha iyi çalışıyor--working-directory="/some/path/"
Barry Staes

4

Biraz daha ayrıntılı sürüm (başka bir pencereden kullanmak için):

#!/bin/bash

DELAY=3

TERM_PID=$(echo `ps -C gnome-terminal -o pid= | head -1`) # get first gnome-terminal's PID
WID=$(wmctrl -lp | awk -v pid=$TERM_PID '$3==pid{print $1;exit;}') # get window id

xdotool windowfocus $WID
xdotool key alt+t # my key map
xdotool sleep $DELAY # it may take a while to start new shell :(
xdotool type --delay 1 --clearmodifiers "$@"
xdotool key Return

wmctrl -i -a $WID # go to that window (WID is numeric)

# vim:ai
# EOF #

2

Her ihtimale karşı, açmak istersiniz

  • yeni bir pencere
  • iki sekmeli
  • ve orada komut yürütmek
  • ve açık kalmalarını sağlamak ...

Hadi bakalım:

gnome-terminal --geometry=73x16+0+0 --window \
  --working-directory=/depot --title='A' --command="bash -c ls;bash" \
  --tab --working-directory=/depot/kn --title='B' --command="bash -c ls;bash"

( mate-terminalbtw için aynı .)


xfce4-terminalBtw için de aynı şekilde çalışır . Bu komutlardan hangisi aslında bu noktadan sorumludur and having them stay open...? Soruyorum çünkü en azından xfce4-terminal
kılavuzda bundan

1

Yukarıdaki birkaç farklı noktayı bir araya getirmek için, komut dosyasına aktarılan tüm argümanları çalıştıracak bir komut dosyası aşağıda verilmiştir vim new_tab.sh:

#!/bin/bash
#
# Dependencies:
#   sudo apt install xdotool

WID=$(xprop -root | grep "_NET_ACTIVE_WINDOW(WINDOW)"| awk '{print $5}')
xdotool windowfocus $WID
xdotool key ctrl+shift+t
wmctrl -i -a $WID
sleep 1; xdotool type --delay 1 --clearmodifiers "$@"; xdotool key Return;

Sonra onu çalıştırılabilir hale getirin: chmod +x new_tab.sh

Şimdi onu yeni bir sekmede istediğinizi çalıştırmak için kullanabilirsiniz: ./new_tab.sh "watch ls -l"


0

Kurulu gnome terminalim yok, ancak bunu komut satırında dbus-send kullanarak bir DBUS çağrısı kullanarak yapabilmelisiniz .


0

Bunun yerine Roxterm kullanmayı düşünün.

roxterm --tab

mevcut pencerede bir sekme açar.


0

Komut satırını kullanmayan bir çözüm arayanlar için: ctrl + shift + t


10
İşleri otomatikleştirmek için komut satırından istiyorlar. Bu kısayollar nadiren yardımcı olur.
Muthu Ganapathy Nathan

tam olarak aradığım buydu. Başlıktaki soru 'otomatik çözümler' ile sınırlı değil @EAGER_STUDENT ve dürüst olmak gerekirse, otomatikleştirilmiş bir GUI'ye ihtiyacım olan bir kullanım senaryosu bulmakta zorlanıyorum. Bu omurgadan açık kalp ameliyatı yapmak gibi bir şey.
Steffen Winkler

6
@SteffenWinkler Çözümün size yardımcı olmasına sevindim. Ama soru 'komut satırı kullanarak' dediğinden, bazı otomatik komutlar, yüksek oylu cevaplar gibi bir şey kullandığımı varsaydım ... Her neyse, cevabın kendisi 'Komut satırını kullanmayan bir çözüm arayanlar için' açıklıyor ... Cevaba şeref .... Dahası, 'Otomatik bir GUI'ye ihtiyacım olan bir kullanım senaryosu bulmakta zorlanıyorum. "Her zaman başlangıçta açılacak 5 sekmeye ihtiyacım var. Bu durumda faydalı olacaktır. Ama bu durumda da otomatikleştirmek için kısayol kullanabiliriz;)
Muthu Ganapathy Nathan

2
Otomatik sekme açmaya ihtiyacım olan örnek; Bir robotta başlangıç ​​komut dosyalarını otomatikleştiriyorum ve komutları çalıştırmak için sekmeleri açmak istiyorum, böylece işlemler çöktüğünde (hepsi sonunda yaptığı gibi) dizüstü bilgisayarımdan ssh girebilir ve konsollardaki günlük çıktısına göz atabilirim günlük dosyası dizinlerini araştırmadan.
WillC

-2

Aynı terminal penceresinde birden çok sekme açmak için aşağıdaki çözümü uygulayabilirsiniz.

Örnek komut dosyası:

pwd='/Users/pallavi/Documents/containers/platform241/etisalatwallet/api-server-tomcat-7/bin'
pwdlog='/Users/pallavi/Documents/containers/platform241/etisalatwallet/api-server-tomcat-7/logs'
pwd1='/Users/pallavi/Documents/containers/platform241/etisalatwallet/core-server-jboss-7.2/bin'
logpwd1='/Users/pallavi/Documents/containers/platform241/etisalatwallet/core-server-jboss-7.2/standalone/log'

osascript -e "tell application \"Terminal\"" \

-e "tell application \"System Events\" to keystroke \"t\" using {command down}" \
-e "do script \"cd $pwd\" in front window" \
-e "do script \"./startup.sh\" in front window" \
-e "tell application \"System Events\" to keystroke \"t\" using {command down}" \
-e "do script \"cd $pwdlog\" in front window" \
-e "do script \"tail -f catalina.out \" in front window" \
-e "tell application \"System Events\" to keystroke \"t\" using {command down}" \
-e "do script \"cd $pwd1\" in front window" \
-e "do script \"./standalone.sh\" in front window" \
-e "tell application \"System Events\" to keystroke \"t\" using {command down}" \
-e "do script \"cd $logpwd1\" in front window" \
-e "do script \"tail -f core.log \" in front window" \
-e "end tell"
> /dev/null 

1
Soru açıkça Linux'taki (gnome) terminali ile ilgili olduğunda, bu OSX merkezli bir cevap gibi görünüyor. osascriptOSX (Apple)
17:22 de nhed

@nhed: Teşekkürler — bu bana cevap veriyor mu ? bu cevaba cevap. Pallavi: Soru Mac ile ilgili olsa bile, kendi ana yolunuzu kodlamak cevabınızı çok yararlı hale getirmez. $HOMEOrtam değişkenini veya farklıysa OSX eşdeğerini kullanmanızı öneririm .
Michael Scheper
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.