如何从命令行在 GNOME 终端中打开一个新选项卡? [关闭]
Posted
技术标签:
【中文标题】如何从命令行在 GNOME 终端中打开一个新选项卡? [关闭]【英文标题】:How to open a new tab in GNOME Terminal from command line? [closed] 【发布时间】:2010-11-14 09:48:19 【问题描述】:我使用的是 Ubuntu 9.04 x64,当我写的时候:
gnome-terminal --tab
在终端,我希望它在同一个终端窗口中打开一个新选项卡。但它会打开一个新窗口。
我发现它的目的是在新窗口中打开一个新标签,即,如果我写:
gnome-terminal --tab --tab
它将打开一个带有两个选项卡的新窗口。
那么,问题是,如何使用gnome-terminal
中的命令在当前 窗口中打开一个新标签页?
【问题讨论】:
如果您仍然在编写 gnome 终端,为什么不能直接按 ctrl+shift+t 打开一个新选项卡;) 当从脚本文件运行命令时,我应该如何按Ctrl+Shift+T
? (不过听说有一种叫做 D-Bus 的东西可以做到)!
每当我启动我的电脑时,我都需要在我的 gnome 终端中打开一些标签。而自动化会让我觉得自己更怪异一些。 (正如他们所说)懒惰是程序员的特点。
@VikrantChaudhary threevirtues.com :-)
Stack Overflow 是一个编程和开发问题的网站。这个问题似乎离题了,因为它与编程或开发无关。请参阅帮助中心的What topics can I ask about here。也许Super User 或Unix & Linux Stack Exchange 会是一个更好的提问地点。
【参考方案1】:
#!/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
这将自动确定相应的终端并相应地打开选项卡。
【讨论】:
谢谢,效果很好。以适当的形式 -WID= xprop -root | grep "_NET_ACTIVE_WINDOW(WINDOW)"| awk 'print $5'; xdotool windowfocus $WID; xdotool key ctrl+shift+t $WID
感谢您的解决方案。不过,我不清楚如何在不同的选项卡中执行不同的命令。无论我在哪里添加命令,它们都会在第一个选项卡中执行。您可以为此提供解决方案吗?
@Calin 使用sleep 1; xdotool type --delay 1 --clearmodifiers "your Command"; xdotool key Return;
运行命令。
为什么是 WID 和 windowfocus 位?窗口不是已经聚焦了吗?
我在哪里放置这个脚本?【参考方案2】:
您还可以让每个选项卡运行一个设置命令。
gnome-terminal --tab -e "tail -f somefile" --tab -e "some_other_command"
【讨论】:
响应gnome-terminal --tab -e "cd /tmp"
,我收到“为此终端创建子进程时出错”
@Hedgehog,我有办法:gnome-terminal --tab --working-directory="/home/user/X/Y/"
。我不知道为什么,但"~/X/Y/"
没有用。
我的命令有问题,如果我只使用 --tab 它可以工作,但如果我使用 --tab -e "my_bash_shorcut" 它不起作用。你知道为什么吗?
@AdrianMatteo 有点晚了,但我想我已经弄明白了:如果你用乱码创建两个文件,然后运行这个命令gnome-terminal --tab -e "tail -f file_a" --tab -e "tail -f file_b"
,gnome 终端将打开两个选项卡,每个选项卡选项卡将具有相应的文件内容,但会在您发送 ^C 的那一刻关闭。这告诉你为什么它不起作用,但我不知道如何解决这个问题。
@AdrianMatteo 见***.com/questions/17402152/…【参考方案3】:
我找到了最简单的方法:
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==pidprint $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 #
【讨论】:
【参考方案5】:以防万一,你想打开
新窗口 有两个标签 并在那里执行命令 并让它们保持打开状态...给你:
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
btw 的作用相同。这些命令中的哪一个实际上负责and having them stay open...
点?我在问,因为手册页中至少没有提到 xfce4-terminal
@Jankapunkt 嗯...很好的问题!我发现:一个简单的、无参数的“--command
进入游戏后,它确实在执行后关闭。这个 --command="bash -c ls;bash"
东西,嵌套并带有尾随 bash 命令似乎是诀窍! (因为 sub-bash 保持打开状态,因此命令永远不会完成。直到您输入 exit
。)对于寻求不使用命令行的解决方案的任何人:ctrl+shift+t
【讨论】:
他们要求命令行 ., 使事情自动化。这些快捷方式很少有帮助。 这正是我想要的。标题中的问题不仅限于“自动化解决方案”@EAGER_STUDENT,老实说,我发现很难想出一个需要自动化 GUI 的用例。这就像通过脊柱进行心脏直视手术。 @SteffenWinkler 很高兴该解决方案对您有所帮助。但由于问题是“使用命令行”,我假设使用一些自动命令,比如高票数的答案......无论如何,答案本身就澄清了“对于任何寻求不使用命令行的解决方案的人”......感谢答案....此外,“我发现很难想出一个我需要自动化 GUI 的用例。”说我总是需要在启动时打开 5 个选项卡。在那种情况下,它会很有用。但在那种情况下,我们也可以使用快捷方式来自动化;) 我需要自动打开标签的示例;我正在自动化机器人上的启动脚本,并且我想打开选项卡来运行命令,以便当进程崩溃时(它们最终都会崩溃),我可以从笔记本电脑 ssh 并查看控制台上的日志输出无需挖掘日志文件目录。【参考方案7】:为了将上述多个不同点结合在一起,这里有一个脚本,它将运行传递给脚本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"
【讨论】:
【参考方案8】:我没有安装 gnome-terminal,但您应该能够通过在命令行上使用 dbus-send 进行 DBUS 调用来执行此操作。
【讨论】:
【参考方案9】:考虑改用 Roxterm。
roxterm --tab
在当前窗口中打开一个标签。
【讨论】:
【参考方案10】:对于在同一个终端窗口中打开多个选项卡,您可以使用以下解决方案。
示例脚本:
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
【讨论】:
当问题显然是关于 linux 中的(gnome)终端时,听起来这是非常以 OSX 为中心的答案。osascript
是 OSX(苹果)
@nhed:谢谢——这回答了我对这个答案的到底是什么?。 Pallavi:即使问题是关于 Mac 的,硬编码你自己的 home 路径也不会让你的答案很有帮助。我建议您使用 $HOME
环境变量,或者如果它不同,则使用 OSX 等效变量。以上是关于如何从命令行在 GNOME 终端中打开一个新选项卡? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
如何在同一目录的 Windows 终端中打开一个新的 git-bash 选项卡?
在 OSX(Snow Leopard) 中打开一个新的终端选项卡,打开终端窗口目录路径