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

96

Когда я пишу

gnome-terminal --tab

на терминале, я ожидаю, что он откроет новую вкладку в том же окне терминала. Но вместо этого открывается новое окно.

Я узнал, что его намерение состоит в том, чтобы открыть новую вкладку в новом окне, то есть, если я напишу

gnome-terminal --tab --tab

откроется новое окно с двумя вкладками.

Итак, вопрос в том, как я могу открыть новую вкладку в текущем окне, используя команду в gnome-terminal?

Я использую Ubuntu 9.04 x64.

  • 4
    если вы все равно пишете gnome-терминал, почему вы не можете просто нажать Ctrl + Shift + T, чтобы открыть новую вкладку;)
  • 12
    И как я должен нажимать Ctrl+Shift+T когда команда запускается из файла сценария? (Слышал, что что-то под названием D-Bus может это сделать)!
Показать ещё 3 комментария
Теги:
terminal
console

8 ответов

59
Лучший ответ
#!/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
  • 0
    если это сработает, это положит конец многим месяцам разочарования. Большое спасибо.
Показать ещё 8 комментариев
60

Вы также можете, чтобы каждая вкладка запускала команду set.

gnome-terminal --tab -e "tail -f somefile" --tab -e "some_other_command"
  • 9
    Я получаю сообщение «Произошла ошибка при создании дочернего процесса для этого терминала» в ответ на gnome-terminal --tab -e "cd /tmp"
  • 3
    @ Ежик, у меня есть способ для этого: gnome-terminal --tab --working-directory="/home/user/X/Y/" . Не знаю почему, но "~/X/Y/" не сработало.
Показать ещё 4 комментария
3

Более сложная версия (для использования из другого окна):

#!/bin/bash

DELAY=3

TERM_PID=$(echo `ps -C gnome-terminal -o pid= | head -1`) # get first gnome-terminal 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 --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
  • 0
    Эти кавычки 'command 1' работают лучше, чем двойные кавычки, которые работают только для меня, когда я также указываю --working-directory="/some/path/"
0

Вместо этого используйте Roxterm.

roxterm --tab

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

0

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

-1

Для открытия нескольких вкладок в одном окне терминала вы можете выполнить следующее решение.

Пример script:

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)
  • 0
    @nhed: Спасибо - это отвечает на мои вопросы, что это такое? ответ на этот ответ. Паллави: Даже если вопрос касался Mac, жесткая настройка вашего собственного домашнего пути не делает ваш ответ очень полезным. Я предлагаю вам использовать переменную окружения $HOME или эквивалент OSX, если он другой.
-2

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

  • 7
    Они просят командную строку., Чтобы автоматизировать вещи. Эти ярлыки редко помогают.
  • 0
    это было именно то, что я искал. Вопрос в названии не ограничивается «автоматизированными решениями» @EAGER_STUDENT, и, честно говоря, мне сложно придумать случай использования, когда мне нужен автоматизированный графический интерфейс. Это похоже на операцию на открытом сердце через позвоночник.
Показать ещё 2 комментария
Сообщество Overcoder
Наверх
Меню