Как мне всегда запускать команду «очистки» в bash, распространяя предыдущий код ошибки? - PullRequest
0 голосов
/ 28 июня 2018

Я настраиваю тесты для проекта Node.js. Тесты включают взаимодействие со статическим контентом (изображениями), который должен подаваться из локального http-server.

Когда тесты завершены - успешно или неудачно - я хочу завершить процесс на сервере и выйти с правильным кодом. В моих скриптах npm я придумал следующее:

"server": "http-server testdata -p 9876 -s",
"testcmd": "...",
"test": "npm run server & npm run testcmd && kill $(lsof -t -i:9876) || (kill $(lsof -t -i:9876) && exit 1)",

, который «работает», но имеет две проблемы:

  • повторяет код, так как я не знаю, как что-либо запускать, вместо определения || и && кейсов
  • любой ненулевой код выхода testcmd всегда будет преобразован в 1 код выхода - в идеале я хотел бы распространить точный код выхода

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

Что было бы хорошим способом упростить этот сценарий потока управления?

1 Ответ

0 голосов
/ 28 июня 2018

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

Так как вы не хотите устанавливать ловушку (и в этом задании я вас не виню), вам нужно перехватить статус выхода testcmd, чтобы вы могу повторить это позже. Сделав это, вы можете запустить очистку без каких-либо условий и, следовательно, без дублирования. Например:

npm run server & (npm run testcmd; status=$?; kill $(lsof -t -i:9876); exit $status)

Возможно, специальный параметр $?, который расширяется до состояния выхода последнего выполненного [частичного] конвейера, является частью, которую вы пропустили.

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