打开多个终端选项卡和运行命令

我需要打开多个终端选项卡,给它们标题,转到目录,并使每个选项卡运行命令。

我是Linux和shell脚本的新手,在网上搜索并检查了一些解决方案之后,我制作了这个脚本(根据下面的答案编辑 ):

#!/bin/bash cd /media/Extra/Project tab=" --tab-with-profile=Default" options=(--tab --title=Terminal) cmds[1]="'rails s'" titles[1]="Server" cmds[2]="'rails c'" titles[2]="Console" for i in 1 2; do options+=($tab --title="${titles[i]}" -e "bash -c \"${cmds[i]} ; bash\"" ) done gnome-terminal "${options[@]}" exit 0 

它会打开选​​项卡,命名它们,但无法执行生成此错误的命令:

为此终端创建子进程时出错

另一个缺点是,如果我暂停运行命令,它会关闭标签,这是我不想要的。 我需要能够停止命令并在同一个选项卡中再次运行它。

脚本有什么问题? 还有另一种更简单的方法吗?

注意:如果我从命令中删除了(-e“\”bash -c $ {cmds [i]}; bash \“”)部分,它将打开给定目录中的选项卡并命名它们,没有错误。

– 编辑-1:

在应用下面的@Tuknutx答案并编辑脚本后,错误不再出现了,但是它给了我bash: rails c: command not foundrails s创建了一个新的rails应用程序,而不是启动rails服务器,我正在使用。 rmvrc在访问此文件夹后选择gemset。

我建议使用tmuxtmuxinator ,它会为你完成工作,你也可以依赖terminator布局!

对于terminator布局结帐mhnagaoka的答案在这里 askubuntu:

  1. 设置完布局后,右键单击任何终端背景,然后选择“首选项” →“ 布局”选项卡,然后单击“ 添加”按钮。

  2. 给它一个名字并点击关闭

  3. 这应该创建提到的~/.config/terminator/config文件。

  4. 现在,您可以使用以下命令启动终结器: terminator -l yourLayout (将myLayout替换为您在步骤2中选择的任何内容)。

  5. (可选)编辑~/.config/terminator/config文件,使其显示[layouts]并嵌套在[[yourLayout]] ,将yourLayout重命名为default并删除/重命名以前的默认布局。 现在,当Terminator在没有任何参数的情况下启动时,它将加载您的自定义[[default]]布局!

总结其他几个答案及其评论,以下是我的最终结果:

 #!/bin/bash cd /path/of/my/stuff tab=" --tab" options=() cmds[1]="echo Banana" cmds[2]="echo Cat" for i in 1 2; do options+=($tab -e "bash -c '${cmds[i]} ; bash'" ) done gnome-terminal "${options[@]}" exit 0 

请注意,我删除了“主”标签,配置文件和标题(在gnome-terminal似乎已弃用)。

试试这个:

 options+=($tab --title="${titles[i]}" -e "bash -c \"${cmds[i]} ; bash\"" ) 

否则-e之后的整个表达式将被解释为命令。

要包含.bashrc中的别名,请使用-ic而不是c

你给出-e选项的参数是"bash -c command; bash"包括引号。 它将整个字符串解释为命令的名称! 试试这个: -e "bash -c 'command ; bash'" 。 这样在终端窗口运行的是command ,在运行之后,你会得到一个子shell,我认为这是你想要的。 顺便说一句,你也可以说'command & bash' ; 这将在后台运行命令,并立即给你女儿shell。