-编辑-1:

-编辑-1:

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

我是 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。

答案1

我建议tmux使用tmuxinator,它会为您完成这项工作,并且您也可以依赖terminator布局!

对于terminator布局检查 mhnagaoka 的答案这里askubuntu 也一样:

  1. 设置布局后,右键单击任意终端背景并选择优先布局选项卡并点击 添加按钮。

  2. 给它命名并点击关闭

  3. 这应该会创建上述~/.config/terminator/config文件。

  4. 现在,您可以使用保存的布局启动终结器:(terminator -l yourLayout替换你的布局与您在步骤 2 中选择的任何内容相同)。

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

答案2

总结一下其他几个答案和他们的评论,我得出的结论如下:

#!/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)。

答案3

尝试这个:

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

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

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

答案4

您为 -e 选项提供的参数"bash -c command; bash"包括引号。它将整个字符串解释为命令的名称!请尝试以下方法:-e "bash -c 'command ; bash'"。这样,您的终端窗口上运行的是 command,运行之后,您将获得一个子 shell,我认为这就是您想要的。顺便说一句,您也可以说'command & bash';这将在后台运行命令并立即为您提供子 shell。

相关内容