Buka tab baru di gnome-terminal menggunakan baris perintah [tertutup]


122

Saya menggunakan Ubuntu 9.04 x64 dan ketika saya menulis:

gnome-terminal --tab

Di terminal, saya mengharapkannya untuk membuka tab baru di jendela terminal yang sama. Tetapi itu membuka jendela baru sebagai gantinya.

Saya menemukan bahwa tujuannya adalah untuk membuka tab baru di jendela baru, yaitu, jika saya menulis:

gnome-terminal --tab --tab

Ini akan membuka jendela baru dengan dua tab.

Jadi, pertanyaannya adalah, bagaimana saya bisa membuka tab baru di jendela saat ini menggunakan perintah di gnome-terminal?


4
jika Anda menulis gnome-terminal, mengapa Anda tidak bisa menekan ctrl + shift + t untuk membuka tab baru;)
rasjani

13
Dan bagaimana saya bisa menekan Ctrl+Shift+Tsaat perintah dijalankan dari file skrip? (Mendengar sesuatu yang disebut D-Bus bisa melakukan itu)!
Vikrant Chaudhary

19
Setiap kali saya memulai PC saya, saya perlu membuka beberapa tab di gnome-terminal saya. Dan mengotomatiskan itu akan membuat saya merasa diri saya sedikit lebih culun. (Seperti yang mereka katakan) Kemalasan adalah fitur programmer.
Vikrant Chaudhary

@VikrantChaudhary threevirtues.com :-)
jpaugh

Stack Overflow adalah situs untuk pertanyaan pemrograman dan pengembangan. Pertanyaan ini tampaknya di luar topik karena ini bukan tentang pemrograman atau pengembangan. Lihat Topik apa yang dapat saya tanyakan di sini di Pusat Bantuan. Mungkin Super User atau Unix & Linux Stack Exchange akan menjadi tempat yang lebih baik untuk bertanya.
jww

Jawaban:


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

Ini akan otomatis menentukan terminal terkait dan membuka tab yang sesuai.


3
Terima kasih, bekerja dengan baik. Dalam bentuk yang tepat -WID= xprop -root | grep "_NET_ACTIVE_WINDOW(WINDOW)"| awk '{print $5}'; xdotool windowfocus $WID; xdotool key ctrl+shift+t $WID
Vikrant Chaudhary

6
Terima kasih atas solusinya. Padahal, tidak jelas bagi saya bagaimana saya dapat menjalankan perintah yang berbeda di tab yang berbeda. Tidak peduli di mana saya menambahkan perintah, mereka semua dieksekusi di tab pertama. Bisakah Anda memasukkan solusi untuk ini?
Calin

10
@Calin digunakan sleep 1; xdotool type --delay 1 --clearmodifiers "your Command"; xdotool key Return;untuk menjalankan perintah.
pengguna13107

2
Mengapa WID dan sedikit fokus jendela? Bukankah jendela sudah fokus?
Chris Morgan

1
Di mana saya menempatkan skrip ini?
Dawoodjee

69

Anda juga dapat meminta setiap tab menjalankan perintah set.

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

11
Saya mendapatkan 'Ada kesalahan saat membuat proses anak untuk terminal ini' sebagai tanggapan terhadapgnome-terminal --tab -e "cd /tmp"
Hedgehog

3
@Hedgehog, Aku punya cara untuk itu: gnome-terminal --tab --working-directory="/home/user/X/Y/". Saya tidak mengapa, tetapi "~/X/Y/"tidak berhasil.
glarrain

1
Saya mengalami masalah dengan perintah saya, jika saya hanya menggunakan --tab berfungsi tetapi jika saya menggunakan --tab -e "my_bash_shorcut" tidak berfungsi. Apa kamu tahu kenapa?
Adrian Matteo

@AdrianMatteo Agak terlambat, tapi saya rasa saya sudah menemukannya: jika Anda membuat dua file dengan omong kosong dan kemudian menjalankan perintah ini gnome-terminal --tab -e "tail -f file_a" --tab -e "tail -f file_b", terminal gnome akan terbuka dengan dua tab di mana setiap tab akan memiliki konten file masing-masing, tetapi akan menutup saat Anda mengirim ^ C. Ini menunjukkan kepada Anda mengapa ini tidak berhasil, tetapi saya tidak tahu bagaimana memperbaikinya.
IDDQD


8

Saya menemukan cara paling sederhana:

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

Saya menggunakan tmuxdaripada menggunakan terminal secara langsung. Jadi yang saya inginkan sebenarnya adalah satu file perintah / shell sederhana untuk membangun pengembangan envdengan beberapa tmuxjendela. Kode shell adalah seperti di bawah ini:

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

Kutipan ini 'command 1'bekerja lebih baik daripada tanda kutip ganda yang hanya bekerja untuk saya ketika saya juga menentukan--working-directory="/some/path/"
Barry Staes

4

Versi yang lebih rumit (untuk digunakan dari jendela lain):

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

Untuk berjaga-jaga, Anda ingin membukanya

  • jendela baru
  • dengan dua tab
  • dan menjalankan perintah di sana
  • dan membiarkannya tetap terbuka ...

ini dia:

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"

(sama untuk mate-terminalbtw.)


Bekerja sama untuk xfce4-terminalbtw. Manakah dari perintah berikut yang sebenarnya bertanggung jawab atas maksud tersebut and having them stay open...? Saya bertanya karena ini tidak disebutkan di halaman manual setidaknya untukxfce4-terminal
Jankapunkt

1

Untuk menyatukan sejumlah poin berbeda di atas, berikut ini skrip yang akan menjalankan argumen apa pun yang diteruskan ke skrip 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;

Selanjutnya buat itu bisa dieksekusi: chmod +x new_tab.sh

Sekarang Anda dapat menggunakannya untuk menjalankan apa pun yang Anda inginkan di tab baru: ./new_tab.sh "watch ls -l"


0

Saya tidak menginstal gnome-terminal tetapi Anda harus dapat melakukan ini dengan menggunakan panggilan DBUS pada baris perintah menggunakan dbus-send .


0

Pertimbangkan untuk menggunakan Roxterm sebagai gantinya.

roxterm --tab

membuka tab di jendela saat ini.


0

Bagi siapa pun yang mencari solusi yang tidak menggunakan baris perintah: ctrl + shift + t


10
Mereka meminta baris perintah., Untuk mengotomatiskan sesuatu. Pintasan ini jarang membantu.
Muthu Ganapathy Nathan

itulah yang saya cari. Pertanyaan dalam judul tidak terbatas pada 'solusi otomatis' @EAGER_STUDENT dan sejujurnya, saya merasa sulit untuk menemukan kasus penggunaan di mana saya memerlukan GUI otomatis. Itu seperti melakukan operasi jantung terbuka melalui tulang belakang.
Steffen Winkler

6
@SteffenWinkler Saya senang solusinya membantu Anda. Tetapi karena pertanyaan mengatakan 'menggunakan baris perintah' saya berasumsi menggunakan beberapa perintah otomatis, seperti jawaban yang dipilih tinggi ... Pokoknya jawabannya sendiri menjelaskan 'Untuk siapa pun yang mencari solusi yang tidak menggunakan baris perintah' .... Pujian untuk jawabannya .... Selain itu, 'Saya merasa sulit untuk menemukan kasus penggunaan di mana saya memerlukan GUI otomatis. Katakanlah selalu saya perlu 5 tab untuk dibuka saat startup. Kalau begitu, itu akan berguna. Tetapi dalam hal itu juga kita dapat menggunakan pintasan untuk mengotomatiskan;)
Muthu Ganapathy Nathan

2
Contoh ketika saya membutuhkan pembukaan tab otomatis; Saya mengotomatiskan skrip startup pada robot, dan saya ingin membuka tab untuk menjalankan perintah sehingga ketika proses macet (seperti yang pada akhirnya terjadi) saya dapat melakukan ssh dari laptop saya dan melihat output log di konsol tanpa menggali melalui direktori file log.
WillC

-2

Untuk membuka banyak tab di jendela terminal yang sama, Anda dapat menggunakan solusi berikut.

Contoh skrip:

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
Kedengarannya seperti ini adalah jawaban yang sangat berpusat pada OSX ketika pertanyaannya jelas tentang terminal (gnome) di linux. osascriptadalah OSX (Apple)
tanggal

@nhed: Terima kasih — itu menjawab apa sebenarnya itu ?? menanggapi jawaban ini. Pallavi: Meskipun pertanyaannya tentang Mac, melakukan hardcode pada jalur utama Anda sendiri tidak membuat jawaban Anda sangat membantu. Saya sarankan Anda menggunakan $HOMEvariabel lingkungan, atau setara OSX jika berbeda.
Michael Scheper
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.