powershell 使用临时设置的环境变量执行命令[重复]

gorkyyrv  于 5个月前  发布在  Shell
关注(0)|答案(1)|浏览(67)

此问题在此处已有答案

PowerShell: Setting an environment variable for a single command only(9个回答)
Setting Windows PowerShell environment variables(24个回答)
上个月关门了。
我以前使用Bash,它有这样的语法:

VAR=VAL ./executable_file

字符串
在执行executable_file期间临时设置VAR
在JavaScript中有相应的语法吗?
MS-Windows上的PowerShell 7.4.0

imzjd6km

imzjd6km1#

在查阅了相关文档后,我发现Start-Process -Environment @{VAR = VAL} --args ...可以实现这一点。

$TEEEST=40
$env:TEEEST=41
Start-Process -NoNewWindow -FilePath "emacs.exe" -ArgumentList '-Q', '--batch', '--eval', `(message`(getenv`(symbol-name`'TEEEST`)`)`) -Environment @{TEEEST = 42} -Wait
echo $TEEEST $env:TEEEST

字符串
输出量:

42
40
41


注意事项:
1.它目前仅适用于pwsh(PowerShell Core)v7.4。
1.你不能像在Bash中那样捕获stdout/stderr(例如,TEEEST=42 emacs -Q -nw --batch --eval '(print (getenv "TEEEST"))' > a.txt)。

Start-Process -NoNewWindow -FilePath "emacs.exe" -ArgumentList '-Q', '--batch', '--eval', `(print`(getenv`(symbol-name`'TEEEST`)`)`) -Environment @{TEEEST = 42} -Wait > a.txt


正如@mklement0所提到的:
你唯一的选择是-RedirectStandardOutput/-RedirectStandardError将输出发送到 files,没有直接 * 合并 * 流的能力。

  1. $LASTEXITCODE没有设置。我测试了这个,
echo $LASTEXITCODE
Start-Process -NoNewWindow -FilePath "gcc.exe" -Environment @{TEEEST = 42} -Wait
echo $LASTEXITCODE  # You may expect it to be 1 because gcc didn't receive arguments.


输出(省略gcc的输出)

0
0

相关问题