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

3
我试图编写一个脚本来启动我的开发环境。为了完成这个任务,我要打开一个gnome终端,并在其中启动rails服务器和autotest。 但是:
gnome-terminal --tab -e "rails server" --tab --tab
会出现错误("error creating the child process")。
另外,这个也不行:
gnome-terminal --tab -e "bash -c \"rails server\"" --tab --tab` 
你有什么解决方法吗?
5个回答

16

Superuser上我们想到了一个不错的技巧

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

  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:感谢您提供的解决方案!


尝试使用“-e'env BASH_POST_RC="rails server" bash'”进行缩短版本。对于第二个“--tab -e”参数,也执行同样的操作。 - Henk Langeveld
我曾经遇到过类似的问题,尝试了你的技巧,它起作用了。谢谢。我注意到命令字符串没有出现在终端或历史记录中。有没有办法解决这个问题? - Steve
我试着谷歌了几分钟。变量BASH_POST_RC是什么意思? - Steve

1
瞎猜一下:为每个你想在选项卡中运行的命令创建一个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会话中有效的操作。除非在Rails启动之前出现奇怪的错误,否则不必担心这个问题。


这种方法与我的第二个gnome-terminal语句有相同的缺陷。它确实尝试在该选项卡中运行“rails server”,但由于找不到“rails”命令,因此无法成功。只有在正确调用.bashrc之后才会出现该命令。而当使用gnome-terminal -e执行命令时,情况并非如此。 - medihack
尝试让包装脚本运行你的.bashrc,然后查看编辑。 - zwol

0

已经回复了,但以防万一,请查看 这个宝石,它可以自动化 KDE、OSX 和 Gnome 桌面上的终端。


0

我假设错误是因为在gnome-terminal尝试运行rails时,PATH未设置。

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


还有一些进一步的问题。我使用RVM来设置整个Ruby环境。而且RVM是在.bashrc中设置的。所以我必须确保gnome-terminal -e "command"首先执行.bashrc,然后再执行命令。 - medihack
我觉得我没有理解你的问题 =/ 你可以让gnome-terminal按指定顺序执行多个命令。也许用分号分隔命令会起作用,如果不行,你可以使用-x来执行剩下的命令。我有什么理解错误吗? - salezica

-1

适用于Ubuntu 16.04

按下Ctr+Shift+T

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接