使用命令行在gnome-terminal中打开一个新选项卡[关闭]


122

我正在使用Ubuntu 9.04 x64,并且在我撰写本文时:

gnome-terminal --tab

在终端,我希望它在同一终端窗口中打开一个新选项卡。而是打开一个新窗口。

我发现它的目的是在新窗口中打开一个新选项卡,即,如果我写:

gnome-terminal --tab --tab

它将打开一个带有两个选项卡的新窗口。

因此,问题是,如何使用中的命令在当前窗口中打开新标签页gnome-terminal


4
如果您仍然在编写gnome终端,为什么不能按ctrl + shift + t来打开一个新标签;)
rasjani

13
Ctrl+Shift+T从脚本文件运行命令时,我应该怎么按呢?(虽然听说有D-Bus可以做到)!
Vikrant Chaudhary

19
每当我启动PC时,都需要在gnome终端中打开一些选项卡。而automatifying这将让我觉得自己有点古怪多。(正如他们所说)懒惰是程序员的功能。
Vikrant Chaudhary

@VikrantChaudhary threevirtues.com :-)
jpaugh

堆栈溢出是一个用于编程和开发问题的站点。这个问题似乎与主题无关,因为它与编程或开发无关。请在帮助中心中查看我可以询问哪些主题。也许超级用户Unix&Linux Stack Exchange是一个更好的选择。
jww

Answers:


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
Vikrant Chaudhary 2010年

6
感谢您的解决方案。不过,我不清楚如何在不同的选项卡中执行不同的命令。不管我在哪里添加命令,它们都将在第一个选项卡中执行。您可以为此提供解决方案吗?
卡林,

10
@Calin用于sleep 1; xdotool type --delay 1 --clearmodifiers "your Command"; xdotool key Return;运行命令。
user13107 2012年

2
为什么WID和windowfocus位?窗口是否已经聚焦?
克里斯·摩根

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 2012年

1
我在使用命令时遇到麻烦,如果仅使用--tab可以正常使用,但是如果我使用--tab -e“ my_bash_shorcut”则无法使用。你知道为什么吗?
Adrian Matteo 2012年

@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而不是直接使用终端。因此,我真正想要的是一个简单的命令/ shell文件,以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-terminal顺便说一句。)


xfce4-terminalbtw的工作原理相同。这些命令中的哪一个实际上是负责这一点的 and having them stay open...?Iam询问,因为至少在手册页中未提及此内容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

考虑改用Roxterm。

roxterm --tab

在当前窗口中打开一个标签。


0

对于寻求不使用命令行的解决方案的任何人:ctrl + shift + t


10
他们要求命令行以自动化操作。这些快捷方式很少有帮助。
Muthu Ganapathy Nathan

那正是我想要的。标题中的问题不仅限于“自动化解决方案” @EAGER_STUDENT,老实说,我发现很难提出需要自动化GUI的用例。这就像通过脊柱进行心脏直视手术。
Steffen Winkler 2014年

6
@SteffenWinkler我很高兴该解决方案对您有所帮助。但是由于问题是说“使用命令行”,所以我假设使用一些自动化命令,例如投票率很高的答案……无论如何,答案本身就澄清了“对于寻求不使用命令行的解决方案的人”。答案很客气……。此外,“我很难提出一个需要自动化GUI的用例。”例如,我总是需要在启动时打开5个选项卡。在这种情况下,它将很有用。但是在那种情况下,我们仍然可以使用快捷方式进行自动操作;)
Muthu Ganapathy Nathan 2014年

2
我需要自动打开标签的示例;我正在自动执行机器人上的启动脚本,我想打开选项卡来运行命令,以便当进程崩溃时(因为它们最终都会崩溃),我可以从笔记本电脑中插入并查看控制台上的日志输出无需浏览日志文件目录。
WillC'4

-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
当问题显然是关于Linux中的(gnome)终端时,听起来这是非常以OSX为中心的答案。 osascript是OSX(Apple)
nhed

@nhed:谢谢,这回答了我到底是什么?对这个答案的回应。Pallavi:即使问题与Mac有关,对自己的主路径进行硬编码也不能使您的答案很有帮助。我建议您使用$HOME环境变量,如果不同则使用OSX等效项。
Michael Scheper '18
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.