Gnome终端:如何打开多个选项卡,执行命令并返回zsh / bash

时间:2018-03-27 00:22:59

标签: bash terminal zsh gnome gnome-terminal

我试图让我的早晨启动过程自动化。通常我会启动多个正在运行的脚本,我将退出(使用 ctrl + c )并根据需要手动重启。

所以我想创建一个

的bash脚本
  1. 启动gnome-terminal
  2. 打开一些标签并执行一些标签 命令
  3. 退出或完成脚本后返回zsh所以我可以 手动输入更多命令
  4. 目前我有,

    #!/bin/bash
    
    gnome-terminal \
    --tab -t "Server" -e "bash -ic \"cd ~/Dev/server; npm start; exec zsh\"" \
    --tab -t "Framework" -e "bash -ic \"cd ~/Dev/framework; npm start; exec zsh\"" \
    --tab -t "Client" -e "bash -ic \"cd ~/Dev/client; npm start; exec zsh\"" \
    --tab -t "Admin" -e "bash -ic \"cd ~/Dev/admin;npm start; exec zsh\"" 
    

    此解决方案的问题是标签可能会或可能不会跳回zsh。有时3个标签,有时一个。理想情况下,我希望所有4回到zsh。

    如果有人能帮助我解决这个问题,我将不胜感激。

1 个答案:

答案 0 :(得分:0)

你可以将gnome-terminal排除在等式之外,它仍然无法工作:

bash -ic "npm start; bash"

按Control-C,您将无法获得shell。对于bash,我们可以使用--rcfile选项解决此问题:

bash --rcfile <(echo "npm start")

这样我们就不会阅读真实的.bashrc,所以既然我们可能想要阅读它,请稍微修改一下:

bash --rcfile <(echo ". ~/.bashrc; npm start")

另一方面,对于zsh,它不能使用等效的(?)--rcs选项,但是在使用ZDOTDIR变量启动时也是如此。因此,我们为.zshrc~/Dev/server~/Dev/framework~/Dev/client中的每一个创建~/Dev/admin,其中包含以下内容:

首先:

. ~/.zshrc
cd ~/Dev/server
npm start

第二

. ~/.zshrc
cd `~/Dev/framework`
npm start

您的gnome-terminal命令将如下所示:

gnome-terminal \
--tab "Server" -e "sh -c 'ZDOTDIR=/path/to/directory/containing/first/.zshrc'" \
--tab "Framework" -e "sh -c 'ZDOTDIR=/path/to/directory/containing/second/.zshrc'"
# etc