Скрипт оболочки для проверки значения в простом файле машинописи

#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. Обновленный вопрос