我以前从未编写过 shell 脚本,但是我有一个 Web 应用程序需要同时运行一大堆东西,而且必须打开每个选项卡、更改目录、启动我的进程等,这很烦人。
我的文件基于这个问题。
第一个块(redis 调用,它cd
自己执行)工作了,有点像 - 它打开一个终端选项卡并运行 redis。(我只是为了测试目的而将它分离出来;理想情况下,它应该是数组的一部分,并且所有选项卡都会在一个终端窗口中打开。)
第二部分是我遇到的问题。显然cd
在 shell 脚本中不起作用,但那个特定的链接超出了我的理解范围,我不知道如何实现那里显示的任何解决方案。我得到的具体错误是:
bash: cd ~/phoenix/RenderService; npm start: No such file or directory
通过循环打开的选项卡在redis-stable
目录中有提示:
以下是我运行脚本时想要发生的情况:
- 使用 Phoenix 配置文件打开一个带有三个选项卡的终端窗口。
- 第一个选项卡应该切换到
redis-stable
目录,然后运行src/redis-server
- 第二个选项卡应该切换到
phoenix/PhoenixServices
目录,然后运行npm start
- 第三个选项卡应该切换到
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
。请参阅这个超级用户问题了解更多想法。