shell 文件打开多个终端选项卡、更改位置、运行命令

shell 文件打开多个终端选项卡、更改位置、运行命令

我以前从未编写过 shell 脚本,但是我有一个 Web 应用程序需要同时运行一大堆东西,而且必须打开每个选项卡、更改目录、启动我的进程等,这很烦人。

我的文件基于这个问题

第一个块(redis 调用,它cd自己执行)工作了,有点像 - 它打开一个终端选项卡并运行 redis。(我只是为了测试目的而将它分离出来;理想情况下,它应该是数组的一部分,并且所有选项卡都会在一个终端窗口中打开。)

第二部分是我遇到的问题。显然cd 在 shell 脚本中不起作用,但那个特定的链接超出了我的理解范围,我不知道如何实现那里显示的任何解决方案。我得到的具体错误是:

bash: cd ~/phoenix/RenderService; npm start: No such file or directory

通过循环打开的选项卡在redis-stable目录中有提示:

在此处输入图片描述

以下是我运行脚本时想要发生的情况:

  1. 使用 Phoenix 配置文件打开一个带有三个选项卡的终端窗口。
  2. 第一个选项卡应该切换到redis-stable目录,然后运行src/redis-server
  3. 第二个选项卡应该切换到phoenix/PhoenixServices 目录,然后运行npm start
  4. 第三个选项卡应该切换到phoenix/RenderService 目录,然后运行npm start

命令运行后,终端窗口和所有选项卡应保持打开。

这是我现有的代码:

#!/bin/bash

# run redis, PhoenixServices, and RenderService

cd ~/redis-stable
gnome-terminal --tab-with-profile=Phoenix --title=Redis -e 'bash -c "src/redis-server; exec bash"'

tab=" --tab-with-profile=Phoenix"
options=(--tab --title=Terminal)

cmds[1]="'cd ~/phoenix/PhoenixServices; npm start'"
titles[1]="PhoenixServices"

cmds[2]="'cd ~/phoenix/RenderService; npm start'"
titles[2]="RenderService"


for i in 1 2; do
  options+=($tab --title="${titles[i]}"  -e "bash -c \"${cmds[i]} ; exec bash\"" )          
done

gnome-terminal "${options[@]}"


exit 0

有人可以帮助可怜的新手吗?

答案1

如果您不需要主动监控所有 3 个选项卡,您可以将它们输入日志文件并在需要更新活动时打开它们。以下是我将如何开始:

#!/bin/bash

cd ~/redis-stable; src/redis-server &> path/to/redis.log &
cd ~/phoenix/PhoenixServices; npm start &> path/to/phoenix.log &
cd ~/phoenix/RenderService; npm start &> path/to/render.log

您可以看到答案这个 stackoverflow 问题有关运行并行进程的更多信息。

until您还可以使用监控服务,在或序列的过程中发生某些事件时触发终端watch。请参阅这个超级用户问题了解更多想法。

相关内容