打开多个终端选项卡和运行命令
我需要打开多个终端选项卡,给它们标题,转到目录,并使每个选项卡运行命令。
我是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 found
, rails s
创建了一个新的rails应用程序,而不是启动rails服务器,我正在使用。 rmvrc在访问此文件夹后选择gemset。
我建议使用tmux
和tmuxinator
,它会为你完成工作,你也可以依赖terminator
布局!
对于terminator
布局结帐mhnagaoka的答案在这里 askubuntu:
设置完布局后,右键单击任何终端背景,然后选择“首选项” →“ 布局”选项卡,然后单击“ 添加”按钮。
给它一个名字并点击关闭 。
这应该创建提到的
~/.config/terminator/config
文件。现在,您可以使用以下命令启动终结器:
terminator -l yourLayout
(将myLayout替换为您在步骤2中选择的任何内容)。(可选)编辑
~/.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。