运行 shell 脚本打开两个终端并在其中运行命令

运行 shell 脚本打开两个终端并在其中运行命令

我正在设置一个 repo,我想编写一个 shell 脚本,它将运行两个命令,分别运行后端和构建前端。到目前为止,我所拥有的内容如下:

#!/bin/sh
sh -e "sh -c 'cd frontend && ng build'"
sh -e "sh -c 'cd backend && symfony server:start'"

但是当我尝试运行该命令时,我会返回sh: 0: Can't open sh -c ...两条命令。有什么解决办法吗?应该清楚的是,这两个命令都不会终止,除非您手动执行。没有必要为这两个命令打开一个新终端,可以在当前终端中执行其中一个。

答案1

可以简化为:

$ ./twocmds.sh 
frontend
backend
$ cat ./twocmds.sh 
#!/bin/sh
/bin/sh -ec 'cd frontend && echo frontend'
/bin/sh -ec 'cd backend && echo backend'

另外,尝试在脚本中指定完整路径。frontend以及backend我在当前目录中创建的文件夹,但最好为它们指定完整路径。

这是一个示例输出,因为我没有您的服务。您应该更改echo frontendecho backend按您的命令,这意味着按/usr/bin/ng build/usr/bin/symfony server:start。但在执行此操作之前,请先whereis ng && whereis symfony找出命令的完整路径。

你的脚本可能看起来像这样:

#!/bin/sh
    /bin/sh -ec 'cd frontend && /usr/bin/ng build &'
    /bin/sh -ec 'cd backend && /usr/bin/symfony server:start'

首先尝试使用不带&。但如果第二条命令等待第一条命令执行,则使用&将第一条命令发送到后台。此外,如果您需要在执行某些命令之前等待,请使用sllep X,其中X秒数。

答案2

#!/bin/bash

a=/absolute/path/frontend
b=/absolute/path/backend

if [[ ! -d $a ]] || [[ ! -d $b ]]; then
   echo "panic! path not found"
   exit 1
fi

cd $a
ng build

cd $b
symfony server:start

相关内容