我正在设置一个 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 frontend
和echo 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