以编程方式打开gnome终端,并在bashrc执行后执行命令

问题描述:

我尝试构建一个小脚本来启动我的开发环境。为了这个任务,我尝试打开一个带有多个选项卡的gnome终端,其中自动启动rails server和autotest。 但以编程方式打开gnome终端,并在bashrc执行后执行命令

gnome-terminal --tab -e "rails server" --tab --tab 

不起作用(“创建子进程时出错”)。 也

 
gnome-terminal --tab -e "bash -c \"rails server\"" --tab --tab` 

不起作用。 任何建议如何解决这个问题?

这里是一个好的技巧,我们制定了在Superuser

  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"'

@Gilles:Thanks f或解决方案!

+0

尝试'-e'env BASH_POST_RC = \“rails server \”bash''获取较短的版本。对第二个'--tab -e'参数做同样的事情。 – 2014-10-10 16:03:04

+0

我有一个类似的问题,并尝试了你的技术。有效。谢谢。我确实注意到,comnmand字符串不会被放入终端或历史记录中。有没有办法做到这一点? – Steve 2014-12-31 05:10:54

+0

我尝试了几分钟的谷歌搜索。变量BASH_POST_RC是什么意思? – Steve 2014-12-31 05:11:36

在黑暗中刺穿:为每个要在选项卡中运行的命令创建shell脚本,使它们可执行并通过绝对路径调用它们。把这个/home/zardoz/bin/railsstart

#! /bin/sh 
exec rails server 

chmod +x它,然后做

gnome-terminal --tab -e /home/zardoz/bin/railsstart --tab --tab ... 

如果不工作,接下来的事情我会尝试是在命令的开始坚持strace -f -o /tmp/trace.log,让它失败,然后通过trace.log进行挖掘,找出哪个系统调用实际上失败了,为什么(这里会有大量的垃圾 - 从后面读尾并寻找以E开头的全部大写的代码短语,如“ENOEXEC” ,“ENOENT”,“EPERM”等等。)

编辑:下面是你在所有的.bashrc设置怎么拉这些脚本之一:

#! /bin/bash 
. ~/.bashrc 
exec rails server 

注意:您可能需要调整您的.bashrc所以它不会做某些事情,只有工作在“真正的”交互式shell会话中。不要担心这种情况,除非在导轨启动之前出现奇怪的错误。

+0

该方法与我的第二个gnome-terminal语句具有相同的缺陷。它真的试图在该选项卡中运行“rails server”,但不能成功,因为它找不到命令“rails”。该命令仅在执行前正确调用.bashrc时才存在。使用gnome-terminal -e执行命令时情况并非如此。 – Zardoz 2010-10-09 19:09:10

+0

尝试让包装脚本运行你的'.bashrc',然后 - 参见编辑。 – zwol 2010-10-10 18:42:14

我假设出现错误是因为在gnome-terminal尝试运行rails时没有设置PATH。

为什么不使用rails服务器的完整路径,或者创建一个设置PATH变量的脚本?

+0

还有一些问题。我使用RVM来设置整个Ruby环境。并且RVM在.bashrc中设置。所以我必须确保gnome-terminal -e“command”首先执行.bashrc,然后执行命令。 – Zardoz 2010-10-10 10:14:22

+0

我不认为我理解你的问题= /你可以让gnome-terminal以指定的顺序执行多个命令。可能将命令分开;将起作用,如果没有,你可以使用-x来执行该行的其余部分。我错了吗? – slezica 2010-10-10 22:58:45

已经回复,但为了以防万一,请检查this gem,以便在KDE,OSX和Gnome桌面上自动执行终端。

for Ubuntu 16。04

Ctr+Shift+T

这将在同一个窗口中打开一个新的标签。此外,用于添加更多选项卡的按钮将出现在最右边的选项卡旁边。