Я разработчик, который недавно перешел с macOS на WSL2 на Windows 10. Мне наконец удалось заставить все работать, но когда я вызываю лямбду локально через Docker, функция os.Getenv () возвращает весь мой файл env, а не только один ключ.
То, что я пробовал:
- Установить "files.eol" = "\ n" в настройках vscode. json
- Установить core.autocrlf = input in git config --global
- Set eol = lf in git config --global
I Я был в тупике целую вечность и не мог найти никаких решений в Интернете. Любая помощь была бы очень признательна!
Edit: Извините, я должен был предусмотреть возможность опубликовать код и env. необходимо для репликации проблемы
////////////
// Code: //
////////////
func init() {
if err := config.Load(); err != nil {
api.ReportError(err)
}
dbo = db.Instance{
DSN: os.Getenv("DBReadDataSourceName"),
}
log.Println("DSN: ", dbo.DSN)
}
// Load ...
func Load() error {
stage := os.Getenv("Stage")
log.Println("stage: ", stage)
if len(data) <= 0 && stage != "local" {
log.Println("stage != local")
log.Println("do production config and ssm stuff")
}
return nil
}
//////////
// Env: //
//////////
Stage=local
ServerPort=:1234
DBDriverName=mysql
DBReadDataSourceName=MySQLReadDataSourceCredentials
DBWriteDataSourceName=MySQLWriteDataSourceCredentials
RiakAddress=RiakAddress
RedisAddress=RedisAddress
ElasticSearchUrl=ElasticSearchUrl
ElasticSearchPrefix=ElasticSearchPrefix
ThidPartyBaseURL=https://api-sandbox.ThirdParty.com
ThidPartyCountryCode=SG
ThidPartyClientID=asdf12345qwertyuiadsf
ThidPartyClientSecret=asdf12345qwertyuiadsf
/////////////
// Output: //
/////////////
2020/07/13 17:04:03 stage: local
ServerPort=:1234
DBDriverName=mysql
DBReadDataSourceName=MySQLReadDataSourceCredentials
DBWriteDataSourceName=MySQLWriteDataSourceCredentials
RiakAddress=RiakAddress
RedisAddress=RedisAddress
ElasticSearchUrl=ElasticSearchUrl
ElasticSearchPrefix=ElasticSearchPrefix
ThidPartyBaseURL=https://api-sandbox.ThirdParty.com
ThidPartyCountryCode=SG
ThidPartyClientID=asdf12345qwertyuiadsf
ThidPartyClientSecret=asdf12345qwertyuiadsf
2020/07/13 17:04:03 stage != local
2020/07/13 17:04:03 do production config and ssm stuff
2020/07/13 17:04:03 DSN: DBReadDataSourceName
Когда я запускаю эту лямбду локально на ma c, os.Getenv () функционирует должным образом, возвращая local
для Stage и возвращая MySQLReadDataSourceCredentials
для DBReadDataSourceName . Однако запуск этой лямбды локально через WSL2 на машине windows приводит к приведенному выше выводу. Stage возвращает весь файл, а DBReadDataSourceName возвращает DBReadDataSourceName
.
Я в полном тупике и перепробовал все, что мог придумать, в том числе вручную написать \ r \ n в конце каждого env. стоимость. Любая помощь будет очень признательна! Большое спасибо за ваше время
Edit 2: Из комментариев
Команда, которую я использовал для загрузки env. файл имеет вид env -S "`cat env.local`" sam local start-api --template template.yaml --profile company_local
, где env.local является именем файла.
Команда env -S $'a=5\nb=6' sh -c 'echo "$a"'
печатает
5
b=6
Команда env -S $'a=5\r\nb=6' sh -c 'echo "$a"'
печатает точно такой же результат, как указано выше,
5
b=6
Команда env -S 'a=5;b=6' sh -c 'echo "$a"'
печатает
5;b=6
И env -S 'a=5:b=6' sh -c 'echo "$a"'
печатает
5:b=6
И команда xxd env.local | head -n 3
печатает
00000000: 5374 6167 653d 6c6f 6361 6c0a 5365 7276 Stage=local.Serv
00000010: 6572 506f 7274 3d3a 3132 3334 0a44 4244 erPort=:1234.DBD
00000020: 7269 7665 724e 616d 653d 6d79 7371 6c0a riverName=mysql.