Linux에서는 다음을 수행 할 수 있습니다.
$ FOO=BAR ./myscript
환경 변수 FOO를 설정하여 “myscript”를 호출합니다.
PowerShell에서도 비슷한 것이 가능합니까? 즉, 먼저 변수를 설정하고 명령을 호출 한 다음 변수를 다시 설정 해제 할 필요가 없습니까?
내 사용 사례에 대해 더 명확하게하기 위해 스크립트의 일부로 사용하고 싶지 않습니다. 오히려 환경 변수를 사용하여 동작을 제어 할 수있는 타사 스크립트가 있지만이 경우에는 명령 줄 인수가 아닙니다. 그래서 타이핑을 번갈아 가며
$ OPTION=1 ./myscript
과
$ ./myscript
매우 편리합니다.
답변
일반적으로 전역 (환경) 변수보다는 매개 변수를 통해 스크립트에 정보를 전달하는 것이 좋습니다. 그러나 그것이 당신이해야 할 일이라면 다음과 같이 할 수 있습니다.
$env:FOO = 'BAR'; ./myscript
환경 변수 $ env : FOO는 나중에 다음과 같이 삭제할 수 있습니다.
Remove-Item Env:\FOO
답변
나는이 문제에 대해 충분히 동기를 부여 받았고 이에 대한 스크립트를 작성했습니다 : with-env.ps1
용법:
with-env.ps1 FOO=foo BAR=bar your command here
# Supports dot-env files as well
with-env.ps1 .\.env OTHER_ENV=env command here
반면에 Gow 를 설치 하면 env.exe
위에서 작성한 빠른 스크립트보다 조금 더 강력 할 수 있습니다.
용법:
env.exe FOO=foo BAR=bar your command here
# To use it with dot-env files
env.exe $(cat .env | grep.exe -v '^#') SOME_OTHER_ENV=val your command
답변
Unix 구문과 동일한 기능을 수행하려면 환경 변수를 설정해야 할뿐만 아니라 명령을 실행 한 후 이전 값으로 재설정해야합니다. PowerShell 프로필에 다음과 유사한 기능을 추가하여 사용하는 일반적인 명령에 대해이 작업을 수행했습니다.
function cmd_special()
{
$orig_master = $env:app_master
$env:app_master = 'http://host.example.com'
mycmd $args
$env:app_master = $orig_master
}
따라서 mycmd
환경 변수의 값에 따라 다르게 작동하는 일부 실행 파일도 있습니다 app_master
. 을 정의함으로써 cmd_special
이제 환경 변수가 설정된 cmd_special
명령 줄 (다른 매개 변수 포함)에서 실행할 수 있으며 명령 app_master
실행 후 재설정 (또는 설정 해제)됩니다.
아마도 단일 호출에 대해이 임시 작업을 수행 할 수도 있습니다.
& { $orig_master = $env:appmaster; $env:app_master = 'http://host.example.com'; mycmd $args; $env:app_master = $orig_master }
이보다 더 쉬울 수 있지만 분명히 PowerShell에서 쉽게 지원되는 사용 사례는 아닙니다. 향후 버전 (또는 타사 기능)이이 사용 사례를 용이하게 할 것입니다. PowerShell에이를 수행하는 cmdlet이 있으면 좋을 것입니다. 예 :
with-env app_master='http://host.example.com' mycmd
아마도 PowerShell 전문가는 그러한 cmdlet을 작성하는 방법을 제안 할 수 있습니다.
답변
한 줄로하는 두 가지 쉬운 방법 :
$env:FOO='BAR'; .\myscript; $env:FOO=''
$env:FOO='BAR'; .\myscript; Remove-Item Env:\FOO
어떤 이유로 든 순수한 한 줄짜리가 포함되지 않은 다른 답변 (감사합니다)의 요약 정보입니다.
답변
CMD가 Windows 커널의 기본 CLI (여전히 많은 도구에 대한 자동화 인터페이스 임)라는 점을 고려 powershell.exe
하면 CMD 프롬프트 또는 CMD 콘솔 문을 허용하는 인터페이스에서 PowerShell 스크립트를 실행할 수 있습니다 .
-File
매개 변수를 사용 하여 스크립트를에 전달 하는 경우 powershell.exe
다른 PowerShell 코드를 사용하여 스크립트에 액세스 할 환경 변수를 설정할 수 없으므로 대신 다음을 호출하기 전에 CMD 환경에서 환경 변수를 설정할 수 있습니다 powershell.exe
.
> set foo=bar && powershell.exe -File .\script.ps1
싱글 &
도 작동하지만 set
어떤 이유로 실패한 경우 명령을 계속할 수 있습니다. (이것도 가능합니까? 모르겠습니다.)
또한 변수 내용으로 "foo=bar"
다음 내용이 전달되지 않도록 따옴표 로 묶는 것이 더 안전 할 수 있습니다 set
.
답변
https://gist.github.com/bobalob/6632690e33747c13a8c00875ee686be2
$ENV:ARM_SUBSCRIPTION_ID = ""
$ENV:ARM_CLIENT_ID = ""
$ENV:ARM_CLIENT_SECRET = "" # This should end with an '=' symbol
$ENV:ARM_TENANT_ID = ""
답변
변수의 범위를 함수와 스크립트로 지정할 수 있습니다.
$script:foo = "foo"
$foo
$function:functionVariable = "v"
$functionVariable
New-Variable에는 형식화하고 new-variable을 사용하여 변수를 선언하려는 경우 -scope 매개 변수도 있습니다.