Откройте новую вкладку в gnome-terminal с помощью командной строки [закрыто]

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-терминале. И автоматизация этого заставит меня почувствовать себя немного более вызывающим. (Как говорится) Лень - это фишка программиста.
Викрант Чаудхари
@VikrantChaudhary threevirtues.com :-)
jpaugh
Stack Overflow - это сайт для вопросов по программированию и разработке. Этот вопрос кажется не по теме, потому что он не о программировании или разработке. См. Какие темы можно задать здесь в Справочном центре. Возможно, лучше спросить 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
Спасибо за решение. Хотя мне непонятно, как я могу выполнять разные команды на разных вкладках. Независимо от того, где я добавляю команды, все они выполняются на первой вкладке. Вы можете предложить решение для этого?
Calin
10
@Calin используйте sleep 1; xdotool type --delay 1 --clearmodifiers "your Command"; xdotool key Return;для запуска команды.
user13107
2
Почему бит WID и оконный фокус? Разве окно уже не будет сфокусировано?
Крис Морган
1
Где мне разместить этот сценарий?
Давуджи
69

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

gnome-terminal --tab -e "tail -f somefile" --tab -e "some_other_command"
Чейз Зайберт
источник
11
Я получаю сообщение «Произошла ошибка при создании дочернего процесса для этого терминала» в ответ наgnome-terminal --tab -e "cd /tmp"
Hedgehog
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
@AdrianMatteo См stackoverflow.com/questions/17402152/...
Klaus
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
jaogoy
источник
Эти цитаты '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 #
Jno
источник
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-terminalкстати.)

Фрэнк Нок
источник
То же самое и для xfce4-terminalкстати. Какая из этих команд на самом деле отвечает за точку and having them stay open...? Я спрашиваю, потому что это не упоминается в man- xfce4-terminal
странице,
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"

NeoGeek
источник
0

У меня не установлен gnome-terminal, но вы можете сделать это, используя вызов DBUS в командной строке с помощью dbus-send .

Майк Маккуэйд
источник
0

Вместо этого рассмотрите возможность использования Roxterm.

roxterm --tab

открывает вкладку в текущем окне.

user25643
источник
0

Для тех, кто ищет решение, которое не использует командную строку: ctrl + shift + t

Jemini
источник
10
Они просят командную строку., Чтобы автоматизировать вещи. Эти ярлыки редко помогают.
Muthu Ganapathy Nathan
это было именно то, что я искал. Вопрос в названии не ограничивается «автоматизированными решениями» @EAGER_STUDENT, и, честно говоря, мне сложно придумать вариант использования, в котором мне нужен автоматизированный графический интерфейс. Это похоже на операцию на открытом сердце через позвоночник.
Steffen Winkler
6
@SteffenWinkler Я рад, что решение вам помогло. Но поскольку в вопросе говорилось «с использованием командной строки», я предполагал использовать некоторые автоматизированные команды, что-то вроде ответов с высокими оценками ... В любом случае сам ответ поясняет: «Для тех, кто ищет решение, которое не использует командную строку» .... Престижность ответу .... Более того, «Мне сложно придумать вариант использования, в котором мне нужен автоматизированный графический интерфейс. Всегда говорят, что мне нужно открывать 5 вкладок при запуске. В таком случае это было бы полезно. Но и в этом случае мы можем использовать ярлык для автоматизации в любом случае;)
Мутху Ганапати Натан
2
Пример, где мне нужно автоматическое открытие вкладок; Я автоматизирую сценарии запуска на роботе, и я хочу открывать вкладки для запуска команд, чтобы в случае сбоя процессов (как все они в конечном итоге) я мог подключиться по ssh со своего ноутбука и посмотреть на вывод журнала на консолях не копаясь в каталогах файлов журнала.
WillC 06
-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 09
@nhed: Спасибо, это отвечает на мой вопрос, что это такое ?? ответ на этот ответ. Паллави: Даже если вопрос был о Mac, жесткое программирование вашего собственного домашнего пути не сделает ваш ответ очень полезным. Я предлагаю вам использовать $HOMEпеременную среды или эквивалент OSX, если он отличается.
Майкл Шепер