Как получить весь скрипт bash для завершения (включая фоновые процессы), если команда bash выполнена успешно или не выполнена? - PullRequest
0 голосов
/ 12 ноября 2019

У меня есть следующий скрипт bash. Я хотел бы запустить три команды

  1. Первая команда запускает интерфейсный веб-сервер, который я хотел бы использовать в качестве фона.
  2. Вторая команда запускает back-конечный веб-сервер, который я хотел бы использовать в качестве фона.
  3. Третья команда запускает скрипт npm, который проверяет веб-приложение.

Третья команда завершится с кодом ошибки, еслитесты не увенчались успехом.

Как заставить мой скрипт bash завершить работу с кодом ошибки, если третья команда завершается с ошибкой? Если третья команда завершается без ошибки, я хочу, чтобы мой скрипт bash завершился с кодом ошибки 0.

Ниже приведена моя попытка (скрипт не работает должным образом). Я намерен завершить все фоновые процессы после npm run my-special-command. Если npm run my-special-command приведет к коду ошибки, я хочу, чтобы мой скрипт завершил работу с этим кодом ошибки. В противном случае я хочу, чтобы мой скрипт завершил работу с кодом ошибки 0.

#!/bin/bash
history-server dist -p 8080 &
nodemon server &
npm run my-special-command || exit 1
exit 0

1 Ответ

1 голос
/ 12 ноября 2019

Вы можете использовать подстановку команд:

# save PID of background process
history-server dist -p 8080 &
history_server_pid=$!

# if command succeds exit 0; else terminate background process and exit 1 
if [ $(npm run my-special-command 2>/dev/null) ]; then
    exit 0
else
    kill $history_server_pid
    exit 1
fi

, если команда выполнена успешно, сценарий выйдет со статусом 0 или 1 в противном случае.

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