Відкрийте нову вкладку в gnome-терміналі за допомогою командного рядка [закрито]


122

Я використовую Ubuntu 9.04 x64 і коли пишу:

gnome-terminal --tab

На терміналі я очікую, що він відкриє нову вкладку в тому ж вікні терміналу. Але воно відкриває нове вікно замість цього.

Я з’ясував, що його намір полягає в тому, щоб відкрити нову вкладку в новому вікні, тобто якщо я напишу:

gnome-terminal --tab --tab

Це відкриє нове вікно з двома вкладками.

Отже, питання полягає в тому, як я можу відкрити нову вкладку у поточному вікні за допомогою команди в gnome-terminal?


4
якщо ви все-таки пишете gnome-terminal, чому не можете просто натиснути клавішу ctrl + shift + t, щоб відкрити нову вкладку;)
rasjani

13
І як я повинен натискати, Ctrl+Shift+Tколи команда виконується з файлу сценарію? (Почув щось, що називається D-Bus, може це зробити)!
Vikrant Chaudhary

19
Щоразу, коли я запускаю свій ПК, мені потрібно відкрити кілька вкладок у своєму gnome-терміналі. І автоматизація, яка змусить мене почувати себе трохи примхливішим. (Як то кажуть) Лінь - особливість програміста.
Vikrant Chaudhary

@VikrantChaudhary threevirtues.com :-)
jpaugh

Переповнення стека - це сайт для програмування та питань розробки. Це питання видається поза темою, оскільки мова не йде про програмування чи розробку. Дивіться, які теми я можу запитати тут, у довідковому центрі. Можливо, краще користуватися питаннями Super User або Unix & Linux Stack Exchange .
jww

Відповіді:


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

Це автоматично визначить відповідний термінал і відповідно відкриє вкладку.


3
Дякую, працює добре. У належній формі -WID= xprop -root | grep "_NET_ACTIVE_WINDOW(WINDOW)"| awk '{print $5}'; xdotool windowfocus $WID; xdotool key ctrl+shift+t $WID
Вікрант Чадхарі

6
Дякую за рішення. Хоча мені незрозуміло, як я можу виконувати різні команди на різних вкладках. Незалежно від того, куди я додаю команди, всі вони виконуються в першій вкладці. Чи можете ви включити для цього рішення?
Калін

10
@Calin використовувати sleep 1; xdotool type --delay 1 --clearmodifiers "your Command"; xdotool key Return;для запуску команди.
користувач13107

2
Чому біт WID та фокус вікон? Чи не буде вікно вже зосередженим?
Кріс Морган

1
Де я розміщую цей сценарій?
Давуджі

69

Ви також можете мати кожну вкладку запустити команду set.

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

11
У відповідь наgnome-terminal --tab -e "cd /tmp"
Їжак

3
@Hedgehog, у мене є спосіб для цього: gnome-terminal --tab --working-directory="/home/user/X/Y/". Я не чому, але "~/X/Y/"не працював.
glarrain

1
У мене виникають проблеми зі своїми командами, якщо я використовую лише --tab, він працює, але якщо я використовую --tab -e "my_bash_shorcut", він не працює. Ти знаєш чому?
Адріан Маттео

@AdrianMatteo Трохи запізнився, але, я думаю, я це зрозумів: якщо ви зробите два файли з гібридом, а потім виконаєте цю команду gnome-terminal --tab -e "tail -f file_a" --tab -e "tail -f file_b", термінал gnome відкриється з двома вкладками, де кожна вкладка матиме відповідний вміст файлу, але закриє мить ви надсилаєте ^ C. Це показує вам, чому це не працює, але я не знаю, як це виправити.
IDDQD


8

Я знайшов найпростіший спосіб:

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

Я використовую tmuxзамість прямого терміналу. Тому я хочу дійсно єдиний і простий файл команди / оболонки для створення розробки envз кількома tmuxвікнами. Код оболонки наведений нижче:

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

Ці котирування 'command 1'працюють краще, ніж подвійні котирування, які працюють для мене лише тоді, коли я також --working-directory="/some/path/"
зазначу

4

Трохи більш досконала версія (для використання в іншому вікні):

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

Про всяк випадок, ви хочете відкрити

  • нове вікно
  • з двома вкладками
  • і виконайте команду там
  • і щоб вони залишалися відкритими ...

ось ви йдете:

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.)


Працює так само для xfce4-terminalbtw. Яка з цих команд насправді відповідає за пункт and having them stay open...? Я прошу, тому що це не згадується на сторінці, принаймні дляxfce4-terminal
Jankapunkt

1

Щоб зібрати кілька різних пунктів вище, ось сценарій, який запустить будь-які аргументи, передані до сценарію 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;

Далі зробіть його виконуваним: chmod +x new_tab.sh

Тепер ви можете використовувати його для запуску все, що завгодно, на новій вкладці: ./new_tab.sh "watch ls -l"


0

У мене не встановлено gnome-термінал, але ви повинні це зробити, використовуючи виклик DBUS в командному рядку, використовуючи dbus-send .



0

Для тих, хто шукає рішення, яке не використовує командний рядок: ctrl + shift + t


10
Вони просять командний рядок., Щоб автоматизувати речі. Ці ярлики рідко допомагають.
Муту Ганапатій Натан

саме це я шукав. Питання в заголовку не обмежується "автоматизованими рішеннями" @EAGER_STUDENT, і якщо чесно, мені важко придумати випадок використання, коли мені потрібен автоматизований графічний інтерфейс. Це як робити операцію на відкритому серці через хребет.
Стеффен Вінклер

6
@SteffenWinkler Я радий, що рішення допомогло вам. Але оскільки в запитанні було сказано "за допомогою командного рядка", я припускав, що я використовую кілька автоматизованих команд, щось на зразок відповідей з високим голосом ... У будь-якому випадку сама відповідь уточнює "Для тих, хто шукає рішення, яке не використовує командний рядок" .... Кудо відповідь .... Більше того, "мені важко придумати випадок використання, коли мені потрібен автоматизований графічний інтерфейс. Ось завжди мені потрібно відкрити 5 вкладок при запуску. У такому випадку було б корисно. Але і в цьому випадку ми можемо використовувати ярлик для автоматизації;)
Muthu Ganapathy Nathan

2
Приклад, коли мені потрібно автоматичне відкриття вкладок; Я автоматизую сценарії запуску на роботі, і хочу відкрити вкладки для запуску команд, щоб, коли процеси виходили з ладу (як це все в кінцевому підсумку), я можу заскочити зі свого ноутбука і подивитися на вихід журналу на консолі не копаючи каталоги файлів журналу.
WillC

-2

Для відкриття декількох вкладок в одному вікні терміналу можна перейти до наступного рішення.

Приклад сценарію:

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
Здається, це дуже орієнтована на OSX відповідь, коли питання чітко про (gnome) термінал в Linux. osascriptє OSX (Apple)
nhed

@nhed: Спасибі, що відповідає на те, що на землі це? відповідь на цю відповідь. Pallavi: Навіть якщо питання стосувалося Mac, жорстке кодування власного домашнього шляху не робить вашу відповідь дуже корисною. Я пропоную вам використовувати $HOMEзмінну середовища або еквівалент OSX, якщо вона інша.
Майкл Шепер
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.