Я пытаюсь проверить, пуста ли переменная среды или не установлена в моем сценарии PowerShell. Сценарий выполняется в контейнере Docker и предназначен для получения нового кода, если определена переменная среды:
CMD if (-not ([string]::IsNullOrEmpty(env:UPDATE_FROM_GITHUB))) { \
Write-Host Git pull started; \
PortableGit\bin\git.exe pull; \
}; \
Получаю кучу ошибок:
web_1 | At line:1 char:110
web_1 | + ... ence = 'SilentlyContinue'; if (-not ([string]::IsNullOrEmpty(env:UPDA ...
web_1 | + ~
web_1 | Missing ')' in method call.
web_1 | At line:1 char:110
web_1 | + ... ue'; if (-not ([string]::IsNullOrEmpty(env:UPDATE_FROM_GITHUB))) { Wr ...
web_1 | + ~~~~~~~~~~~~~~~~~~~~~~
web_1 | Unexpected token 'env:UPDATE_FROM_GITHUB' in expression or statement.
web_1 | At line:1 char:110
web_1 | + ... ence = 'SilentlyContinue'; if (-not ([string]::IsNullOrEmpty(env:UPDA ...
web_1 | + ~
web_1 | Missing closing ')' in expression.
web_1 | At line:1 char:110
web_1 | + ... ue'; if (-not ([string]::IsNullOrEmpty(env:UPDATE_FROM_GITHUB))) { Wr ...
web_1 | + ~~~~~~~~~~~~~~~~~~~~~~
web_1 | Missing closing ')' after expression in 'if' statement.
web_1 | At line:1 char:132
web_1 | + ... e'; if (-not ([string]::IsNullOrEmpty(env:UPDATE_FROM_GITHUB))) { Wri ...
web_1 | + ~
web_1 | Unexpected token ')' in expression or statement.
web_1 | At line:1 char:133
web_1 | + ... '; if (-not ([string]::IsNullOrEmpty(env:UPDATE_FROM_GITHUB))) { Writ ...
web_1 | + ~
web_1 | Unexpected token ')' in expression or statement.
web_1 | At line:1 char:134
web_1 | + ... ; if (-not ([string]::IsNullOrEmpty(env:UPDATE_FROM_GITHUB))) { Write ...
Я не знаю, с чего начать. Ошибки кажутся излишними, но нет четкой отправной точки. Может ли это иметь какое-то отношение к тому, как Docker разбирает команды?





Переменные PowerShell, включая переменные среды, всегда должны называться сигилом $.
Следовательно, env:UPDATE_FROM_GITHUB должен быть $env:UPDATE_FROM_GITHUB
Чтобы просто проверить, определена ли переменная среды / имеет ли значение, вам не обязательно нужен -not [string]::IsNullOrEmpty(...); вместо этого вы можете воспользоваться неявным логическим преобразованием PowerShell:
$null или пустая строка считается $False$TrueЧтобы собрать все вместе:
CMD if ($env:UPDATE_FROM_GITHUB) { \
Write-Host Git pull started; \
PortableGit\bin\git.exe pull; \
}; \