Я настраиваю repo, и я хочу сделать сценарий оболочки, который выполнит две команды, которые выполняют бэкенд и создают frontend. Что я имею, до сих пор что-то вроде этого:
#!/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 ...
для обеих строк. Что решение к этому? Должно быть ясно, что обе этих команды не завершатся, пока Вы не сделаете вручную. Не необходимо открыть новый терминал для обеих команд, можно быть выполнен в текущем терминале.
Это могло быть упрощено:
$ ./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
число секунд.
#!/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