使用 gnome-terminal 打开多个选项卡

使用 gnome-terminal 打开多个选项卡

我正在尝试创建一个命令,该命令将从 Rails 堆栈、rails s、spork 和 autotest 中打开 3 个服务。我可以通过打开 3 个终端、转到 app 文件夹并运行它们来单独运行这些命令。我甚至可以打开 3 个新选项卡并在每个选项卡上运行命令。

问题是,当我尝试通过 gnome-terminal 打开选项卡时,它们会失败,如下所示:

gnome-terminal --tab --title="rails s" -e "rails s" --tab --title="spork" -e "spork" --tab --title="autotest" -e "autotest"

错误(对于 spork 和自动测试):

There was an error creating the child process for this terminal
Failed to execute child process "spork" (No such file or directory)

令人惊讶的是,它确实适用于“rails s”(选项卡显示服务器正在运行)。

有任何想法吗?

答案1

调用gnome-terminal三次并将命令串联起来&& 惯于工作,并且选项卡不会出现在同一个终端中,事实上您必须退出第一个终端才能出现下一个终端。

确保所有选项卡gnome-terminal同时在一个实例中打开的方法是使用开关--tab-with-profile=PROFILENAME。在下面的命令中,您可以将第一个命令保留为gnome-terminal --tab它是第一个要生成的窗口;现在您需要知道的只是您正在使用哪个配置文件,您可以使用它--tab-with-profile=YourProfile来调用其他命令,它们将同时出现在打开的原始终端中。

这是您修改后的命令:

gnome-terminal --tab --title="rails s" -e "rails s" --tab-with-profile=Default --title="spork" -e "spork" --tab-with-profile=Default --title="autotest" -e "autotest"

(对于未来的读者:用后面给出的程序名替换-e来测试这里给出的命令行;记住您的目标必须-e安装并且在$PATH;对于未使用的东西,$PATH使用绝对路径,例如/opt/mike/program

请记住指定您用于--tab-with-profile开关的实际配置文件。第一次调用gnome-terminal必须使用--tab,其余所有调用都--tab-with-profile使用。使用此方法,应该可以在同一个实例中打开大量选项卡gnome-terminal

通过右键单击找到您当前正在使用的配置文件gnome-terminal,然后查看配置文件,您当前正在使用的配置文件上会有一个标记:

在此处输入图片描述

转到“个人资料偏好设置”以获取更多信息并检查个人资料的名称。

有关详细信息,请man gnome-terminal参阅Ubuntu 在线手册页


笔记

如果您在使用 启动程序时遇到问题gnome-terminal,请将位置添加到$PATH,或创建符号链接并将其放置在某个$PATH位置,或者(这里非常有用):创建一个简单的 bash 包装器脚本并在gnome-terminal上面的命令行中调用它。(您必须使用绝对路径来调用它:即,/location/of/script而不仅仅是它的名称。)

举个例子:

#!/bin/bash
cd $HOME/.rvm/gems/ruby-2.0.0-p0/bin 
spork
exit 0

然后命名脚本,使其可执行并在gnome-terminal上面的命令行中调用它。对所有有问题的非 repo 程序执行此操作。

答案2

以下是来自stackoverflow.com

  1. eval "$BASH_POST_RC"在 .bashrc 末尾添加

  2. 将每个选项卡的环境变量设置BASH_POST_RC为您想要执行的命令,例如: gnome-terminal --working-directory="/home/zardoz/projects/my_rails_app" --tab -e 'bash -c "export BASH_POST_RC=\"rails server\"; exec bash"' --tab -e 'bash -c "export BASH_POST_RC=\"autotest\"; exec bash"'

答案3

gnome-terminal --tab -- sh -c "python3 'test.py' ; bash"

此代码在运行 python 脚本的终端中打开新选项卡,当它结束时,这个新选项卡不会关闭,因为我在这段代码的末尾添加了“bash”...

如果你想多次使用它,请将其放入 bsh 脚本中的 while 循环中

答案4

正如在其他问答中所讨论的那样,打开多个选项卡的唯一直接、非弃用的方法是多次发出命令,例如 Unix & LInux 对问题的回答,打开新的 gnome-terminal (v3.28+),其中包含多个选项卡和不同的命令, 经过维拉迪米尔·萨沃斯汀

gnome-terminal -- bash -c "myCommand -some-args; bash"
gnome-terminal -- bash -c "myOtherCommand -some-args; bash"

如果我想从每个命令中提取更长的表达式,似乎我必须创建一个脚本并调用它,我这样做是; bash为了保持窗口打开。我使用了一个简单的 run_cmd.sh:

#! /bin/bash

set -euo pipefail

display_success() {
  read -p "Exited with success; press enter to exit..."
}

display_error() {
  read -p "Exited with error value $1; press enter to exit..."
}

run_cmd() {
  echo "Running: $@"
  "$@" && display_success || display_error $?
}

run_cmd "$@"

然后我bash -c用替换run_cmd.sh。由于该脚本很简单,请将其视为公共领域。

相关内容