我正在尝试创建一个命令,该命令将从 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
eval "$BASH_POST_RC"
在 .bashrc 末尾添加将每个选项卡的环境变量设置
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
。由于该脚本很简单,请将其视为公共领域。