Как преобразовать пакетный файл Windows, запускаемый дважды npm с оценкой кода выхода, в скрипт Linux bash?

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

@echo off

echo Installing/updating bot dependencies
call npm ci --only=production --loglevel=warn >NUL

if NOT ["%errorlevel%"]==["0"] (
  pause
  exit /b %errorlevel%
)

echo Starting the bot
call npm run start

if NOT ["%errorlevel%"]==["0"] (
  pause
  exit /b %errorlevel%
)

Я бы сначала улучшил пакетный файл, заменив оба условия if на if errorlevel 1 pause & exit /B или используя call npm.cmd ci --only=production --loglevel=warn >NUL || (pause & exit /B) и call npm.cmd run start || (pause & exit /B). См. одна строка с несколькими командами с использованием пакетного файла Windows для получения подробной информации об условии и операторе условного выполнения команды ||, который интерпретаторы оболочки Linux также поддерживают с тем же значением, что и командный процессор Windows. & — это просто ; в сценариях оболочки.

Mofi 22.03.2022 10:13
call — это cmd внутренняя команда для вызова пакетного файла из пакетного файла. Интерпретаторы оболочки Linux не имеют такой команды. Таким образом, в .sh файле call нужно просто удалить его для запуска npm, который, я думаю, является исполняемым файлом в Linux, а не файлом сценария, как в Windows.
Mofi 22.03.2022 10:17
>NUL кодируется в сценариях оболочки Linux с помощью >/dev/null. В оболочке нет команды pause ждать нажатия клавиши. В файл .sh можно добавить функцию, запрашивающую у пользователя нажатие клавиши, хотя на самом деле это не имеет смысла, поскольку сценарии оболочки Linux обычно выполняются из терминала или приложения, которое фиксирует стандартный вывод и вывод ошибок и отображает оба в графическом окне.
Mofi 22.03.2022 10:20

Сценарий оболочки может состоять всего из пяти строк: 1. #!/bin/bash (шебанг, чтобы интерпретировать файл сценария с bash в каталоге /bin/ при его прямом запуске и атрибуте исполняемого файла, установленном в .sh файле), 2. echo "Installing/updating bot dependencies" 3. npm ci --only=production --loglevel=warn >/dev/null || exit, 4. echo Starting the bot, 5 npm run start || exit. Шебанг также может быть просто #!/bin/sh для интерпретации сценария с помощью любого интерпретатора сценариев, установленного по умолчанию на ПК с Linux.

Mofi 22.03.2022 10:25

PS: ни команда pause, ни команда exit не изменяют текущий код выхода, как описано в Какие внутренние команды cmd.exe очищают ERRORLEVEL до 0 в случае успеха?. Таким образом, код выхода npm.cmd соответственно последней команды/исполняемого файла, выполненного этим пакетным файлом, возвращается родительскому процессу с помощью cmd.exe при использовании только pause & exit /B в качестве обоих команды, чтобы не изменять код выхода, назначенный в настоящее время динамической переменной ERRORLEVEL.

Mofi 22.03.2022 10:30
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
5
51
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вот перевод:

#!/bin/bash

echo "Installing/updating bot dependencies"

npm ci --only=production --loglevel=warn >/dev/null
exit_code=$?

if [ ${exit_code} -ne 0 ]; then
  read -p "Press ENTER to exit."
  exit ${exit_code}
fi

echo Starting the bot

npm run start
exit_code=$?

if [ ${exit_code} -ne 0 ]; then
  read -p "Press ENTER to exit."
  exit ${exit_code}
fi

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