Как экспортировать переменные окружения из. sh файла в windows? - PullRequest
0 голосов
/ 01 мая 2020

Я работаю над проектом Java, который был написан в ОС MA C. Там. sh файл содержит переменные среды, которые являются именами пользователей и паролями базы данных. Когда я импортировал этот проект на мой windows компьютер, эти переменные не читаются.

ниже приведен код файла karate-test.env

env=test

export KARATE_MYSQL_USER=dbusername

pass=oldpass

if [ $env == "stage" ]; then

pass=newpassword



fi

export KARATE_MYSQL_PASS=%pass

Этот файл читается еще один файл конфигурации карате. js.

function() {


var env = karate.env; 


var dbUser = java.lang.System.getenv("KARATE_MYSQL_USER");


var dbPassword = java.lang.System.getenv("KARATE_MYSQL_PASS");

Когда я запускаю свой код, я получаю сообщение об ошибке подключения не выполнено.

Какие изменения необходимы, чтобы убедиться, что эти файлы среды экспортируется должным образом.

Ответы [ 2 ]

0 голосов
/ 04 мая 2020

Я использовал пакетный файл для установки этих переменных.

из 'экспорта', я использовал 'set'

@ ECHO OFF

set env = stage

set KARATE_MYSQL_USER = someuser

set KARATE_MYSQL_PASS = somepasskey

Кажется, это работает нормально для меня.

Спасибо за ответы ..

0 голосов
/ 02 мая 2020

Если такой файл выглядит примерно так:

export KARATE_MYSQL_USER=KarateUser
export KARATE_MYSQL_PASS=Karate@89272363
export VEHICLE_API_PASS=Test@4239

Тогда вам нужно будет выполнить его разбор, как показано ниже:

$envFile = 'X:\variables.env'
$content = Get-Content -Path $envFile -Raw  # read the file as single string

$regex = [regex] '(?im)export\s+(?<varname>[^=]+)\s*=\s*(?<value>.+)$'
$match = $regex.Match($content)
while ($match.Success) {
    $varName  = $match.Groups['varname'].Value
    $varValue = $match.Groups['value'].Value
    Write-Host "Setting Environment variable '$varName' to '$varValue'"
    # set the environment variable in Windows.
    # If this does needs to apply to ALL users, use 'Machine' instead of 'User'
    [System.Environment]::SetEnvironmentVariable($varName, $varValue, 'User') 
    $match = $match.NextMatch()
} 

Детали регулярного выражения:

export            Match the characters “export” literally
\s                Match a single character that is a “whitespace character” (spaces, tabs, line breaks, etc.)
   +              Between one and unlimited times, as many times as possible, giving back as needed (greedy)
(?       Match the regular expression below and capture its match into backreference with name “varname”
   [^=]           Match any character that is NOT a “=”
      +           Between one and unlimited times, as many times as possible, giving back as needed (greedy)
)                
\s                Match a single character that is a “whitespace character” (spaces, tabs, line breaks, etc.)
   *              Between zero and unlimited times, as many times as possible, giving back as needed (greedy)
=                 Match the character “=” literally
\s                Match a single character that is a “whitespace character” (spaces, tabs, line breaks, etc.)
   *              Between zero and unlimited times, as many times as possible, giving back as needed (greedy)
(?         Match the regular expression below and capture its match into backreference with name “value”
   .              Match any single character that is not a line break character
      +           Between one and unlimited times, as many times as possible, giving back as needed (greedy)
)                
$                 Assert position at the end of a line (at the end of the string or before a line break character)

(?im) делает регулярное выражение без учета регистра и позволяет ^ и $ совпадать при переносе строки

...