Выполнение сценария оболочки для открытия двух терминалов и команд выполнения в них

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

1
задан 22 March 2020 в 00:50

2 ответа

Это могло быть упрощено:

$ ./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 число секунд.

1
ответ дан 7 April 2020 в 23:31
#!/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

0
ответ дан 7 April 2020 в 23:31

Другие вопросы по тегам:

Похожие вопросы: