Mac bash запускает команды параллельно, когда один процесс не завершается - PullRequest
0 голосов
/ 02 апреля 2019

Я пытаюсь найти способ запустить два процесса параллельно из одной команды в терминале Mac, где одна команда не завершается. По сути, я хочу запустить следующую команду для автоматического просмотра тестов кармы:

npm karma start --no-single-run --auto-watch

Я также хочу открыть браузер для страницы запуска отладки кармы:

http://localhost:9876/debug.html

Я хочу открыть браузер примерно через 15 секунд после запуска команды karma start, указанной выше. Я не могу понять, как сделать это параллельно в одной строке.

Вот что я придумала после двух часов поисков:

npx karma start --no-single-run --auto-watch & ( sleep 15 && open http://localhost:9876/debug.html )

Это работает так, как я хочу, за исключением того факта, что карма, кажется, работает в отдельном контексте - это означает, что пользователь не может Ctrl+C и убить процесс узла, ему придется делать это вручную.

1 Ответ

0 голосов
/ 02 апреля 2019

Вы можете запустить команду npm в фоновом режиме и выполнить очистку, когда пользователь нажмет Ctrl + C:

#!/usr/bin/env bash

# Initialize variables
wait_sec=15
browser_url="http://localhost:9876/debug.html"
npm_pid=""

function start_npm_command() {

  npm karma start --no-single-run --auto-watch &
  npm_pid=$!

}

function open_browser() {

  echo "Opening browser after waiting for ${wait_sec} seconds"
  sleep "${wait_sec}"
  open "${browser_url}"
  echo -e "\n\n Press 'Ctrl+C' to exit"

}

function handle_exit() {

  echo "Execute cleanup.."
  if [[ -n "${npm_pid}" ]]; then
    echo "Killing npm pid"
    kill -s SIGKILL "${npm_pid}"
  else
    echo "Do nothing"
  fi

}

function main() {

  start_npm_command
  open_browser

}

trap handle_exit SIGHUP SIGINT SIGQUIT SIGABRT SIGTERM
main

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...