#linux #typescript #macos #shell
Вопрос:
У меня есть простой файл TS
env.ts
Который содержит
export const BUILD_SDK = false
export const DUMMY_PRESET = false
и у меня есть телосложение.скрипт sh, который создает наш SDk.
Я хочу написать сценарий оболочки (сборка.sh) , который выдает ошибку, если значение в env.ts является ложным перед построением.
Может кто-нибудь, пожалуйста, помочь мне придумать, как это сделать?
Обновление на основе ответа от Flashtube
Поэтому я попробовал это
#!/bin/bash
# With head -n 2 env.ts we get the first line of env.ts
# With cut -d " " we split the line at every space
# With -f 5 we specify we want the 5th spit value, in this case the boolean value
# If that is equals to true, we echo an error and pipe it to the error output with 1>amp;2 and exit with exit status 64
if [[ $(head -n 2 App/env/index.tsx | cut -d " " -f 5) = "false" ]]; then
echo "Error! check env variables and set it to true" 1>amp;2;
exit 64;
fi
Где мой файл env выглядит так
//Please inform if you do any changes in this file so that we can update build script
export const SDK_BUILD = false
но это не сработало
Комментарии:
1. Вероятно, вам придется использовать компилятор tsc и загрузить выходные данные, а затем сделать еще несколько сложных вещей. Я бы посоветовал вам вместо этого использовать что-то вроде dotenv: github.com/motdotla/dotenv концепция dotenv имеет поддержку на многих языках, и вам не нужно создавать свои собственные сумасшедшие вещи.
Ответ №1:
Если вы хотите проверить, является ли какая-либо константа из набора определенных констант ложной, вы можете сделать это в bash следующим образом:
#!/bin/bash
FILE="/path/to/file/env.ts"
CONST_TO_CHECK="(BUILD_SDK|DUMMY_PRESET)"
if grep -Eq 'exports*consts*'"${CONST_TO_CHECK}"'s*=s*false' "$FILE"; then
echo "Error"
fi
Просто добавьте свои имена констант в CONST_TO_CHECK
разделенные трубой.
Если вы хотите узнать, является ли какая-либо константа из длинного списка const ложной, используйте это:
#!/bin/bash
FILE="/path/to/file/env.ts"
CONST_NAME_REGEX='[a-zA-Z_]*'
if grep -Eq 'exports*consts*'"${CONST_NAME_REGEX}"'s*=s*false' "$FILE"; then
echo "Error"
fi
Здесь вам, возможно, потребуется обновить CONST_NAME_REGEX
, чтобы отразить ваши соглашения об именах.
Комментарии:
1. Это правильный путь. У меня слишком мало знаний о grep, чтобы выкинуть подобную команду x)
Ответ №2:
Вы можете использовать следующий сценарий bash
#!/bin/bash
# With head -n 1 env.ts we get the first line of env.ts
# With cut -d " " we split the line at every space
# With -f 5 we specify we want the 5th spit value, in this case the boolean value
# If that is equals to true, we echo an error and pipe it to the error output with 1>amp;2 and exit with exit status 64
if [[ $(head -n 1 env.ts | cut -d " " -f 5) = "false" ]]; then
echo "Error!" 1>amp;2;
exit 64;
fi
Теперь мы можем определить, является ли значение ложным или истинным.
Комментарии:
1. что, если я захочу проверить два env? (в вопросе, фрагмент кода)?
export const DUMMY_PRESET = false
? Я пытался-n 2
, но это не сработало2. Обновленный вопрос