使用多个虚拟环境标签和服务启动gnome-terminal,并预先命名
我正在做一个服务器端的项目,这个项目包含了几个服务。每个服务都是以交互模式运行的,也就是说它们不是后台运行的,这样在开发的时候比较方便。这个项目是在虚拟环境(virtualenv)中进行的。所以,启动一个服务的典型方式是:
$ cd ~/to/vitualenv/subdir/where/service/code/located
$ source ../path/to/virtualenv/bin/activate
$ ./script-to-start-service
+ Set title of terminal to the service name via GUI
如果只有2到3个服务的话,这样做还可以。但是我们有十几个服务。每次电脑重启后重新启动所有服务真的是一件麻烦事。
所以我想要一个脚本,执行后能打开一个新的gnome-terminal窗口,里面有十几个命名的标签(每个服务一个标签),每个标签里都激活虚拟环境,并且运行一堆服务实例。到目前为止,我得到的最佳结果是:
$ gnome-terminal --working-directory=~/to/vitualenv/subdir --window --tab --tab
--title和--profile看起来被忽略了,而且如果指定了--command,新的窗口在打开后就会立刻关闭。
有没有什么想法?怎么才能激活脚本,给窗口命名,并运行服务呢?
附注:这只是为了开发目的,不是为了在真实服务器上部署。
2 个回答
创建一个名为“service”的gnome-terminal配置文件(点击编辑 > 配置文件 > 新建)。
在编辑 > 配置文件首选项 > 标题和命令 > 使用自定义命令代替我的shell中,将自定义命令设置为:
bash --rcfile ../path/to/virtualenv/bin/activate
然后使用gnome-terminal来启动你的服务。下面的命令会在不同的目录中打开两个yes
的实例,分别在不同的标签页里。我把这个命令分成了三行,但你应该把它作为一行输入。
gnome-terminal
--tab-with-profile=service --working-directory=/home/$USER/data --title="feelgood" --command="yes"
--tab-with-profile=service --working-directory=/code --title="negative" --command="yes no"
你可以选择不直接调用activate,而是创建一个文件来作为你的自定义命令:
source ~/.bashrc
source ../path/to/virtualenv/bin/activate
你还可以添加其他命令(比如切换目录或启动你的服务)。不过要注意,每次用这个配置文件打开终端时,这些命令都会被执行。
下面这个命令对我来说有效,并且能完成你想要的功能:
gnome-terminal --working-directory=/path/to/wd --tab-with-profile=profile1 --title=title1 -e 'bash --rcfile /path/to/rcfile1.sh' --tab-with-profile=profile2 --title=title2 -e 'bash --rcfile /path/to/rcfile2.sh'