此问题在此处已有答案:
PowerShell: Setting an environment variable for a single command only(9个回答)
5年前关闭。
我知道你可以将环境变量传递给docker-compose。
docker-compose.yml
. . .
mysql:
image: mariadb:10.2
ports:
- "${DB_PORT}:3306"
. . .
字符串
第一个月
然而,这只适用于bash。我正在使用PowerShell,并试图找到一个等效的,只有一行命令。PS> $env:DB_PORT:3306 docker-compose up
不工作。多行也不工作
$env:DB_PORT=3396 `
>> docker-compose -up
型
我得到的错误是Unexpected token 'docker-compose' in expression or statement.
如果我一次做一个,它会起作用...
PS> $env:DB_PORT=3396
PS> docker-compose -up
型
当bash中的等价物简单得可笑时,在PowerShell中没有办法做到这一点吗?
1条答案
按热度按时间tzdcorbm1#
类似POSIX的shell(如
bash
)提供了一种以 * 命令范围 * 的方式设置环境变量的方法,只需将<varName>=<value>
对直接前置到命令中,如下例所示:字符串
foo=bar
仅为bash -c '...'
* 子进程 * 定义 * 环境 * 变量foo
;next 命令-echo ...
-* 看不到 * 此变量。PowerShell自v7.4起没有等效构造。
为了在未来添加支持,至少使用类似的语法,这是一个长期的特性请求的主题,GitHub issue #3316。
现在,你能做的最好的事情就是首先 * 在一个 * 单独的语句 * 中,使用
;
(PowerShell的语句分隔符)定义你感兴趣的环境变量。之后你调用的任何外部实用程序(总是在 * 子进程 * 中运行)都会看到它,但是请注意环境变量在当前PowerShell会话中仍然有效,除非您手动删除它:型
注意
$env:foo = $null
,也就是说,将环境变量设置为$null
与 * 删除 * 它是一样的;或者,您可以将所有Remove-Item env:foo
如果您还想事后恢复一个预先存在的值:
型
以上结果:
型
这表明当
bash
进程看到临时值bar
时,$env:foo
的原始值随后被恢复。还要注意另一个重要的区别:
$env:<varName>
命名空间(例如,$env:foo
)显示环境变量,这与PowerShell自己的变量(例如,$foo
)的(无前缀)命名空间不同。