Я никогда не писал сценарий оболочки прежде, но у меня есть веб-приложение, для которого нужен целый набор вещей, работающих сразу, и это является раздражающим для открытия каждой вкладки, каталогов изменения, запустить мои процессы, и т.д.
Я основываю свой файл на один показанный в этом вопросе.
Первый блок (вызов советов, который делает cd
самостоятельно) работы, вид - это открывает единственную терминальную вкладку и выполняет советы. (Я только выделил его для тестирования; идеально это была бы часть массива, и все вкладки откроются в единственном окне терминала.)
Второй блок - то, где я сталкиваюсь с проблемами. По-видимому, cd
не работает в сценариях оболочки, но что конкретная ссылка является путем по моей голове, и я не понимаю, как реализовать любое из решений, показанных там. Определенная ошибка, которую я получаю:
bash: cd ~/phoenix/RenderService; npm start: No such file or directory
Вкладки, которые открываются через цикл, имеют подсказки в redis-stable
каталог:
Вот то, что я хочу произойти, когда я запускаю скрипт:
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
Кто-либо может выручить плохой newb?
Если Вы не должны активно контролировать все 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
последовательности. См. ответы на этот вопрос о суперпользователе для большего количества идей.