如何为从cygwin运行的powershell传播windows环境变量



我已经安装了cygwin,即将执行一个用powershell编写的脚本。我是这样做的:

powershell "& ""C:myscript.ps1"""

这正如预期的那样,我必须这样做,因为在那个脚本中,我正在执行另一个外部命令等等。。。

我想在这个脚本中添加一些环境变量,所以我想写一些类似的东西

powershell "$FOO="bar"; & ""C:myscript.ps1"""

这样我就可以访问脚本中的$FOO变量并对其进行处理。其想法是,如果没有定义该变量,我将使用一些默认值。我知道这也可以用一些环境变量来实现,或者我可以把这些变量放在概要文件(profile.ps1)中,但我想去掉那个文件,所以我不需要任何文件,我可以用我显示的变量覆盖默认值。

但据说:

=bar : The term '=bar' is not recognized as the name of a cmdlet, function,
script file, or operable program. Check the spelling of the name, or if a path
was included, verify that the path is correct and try again.
At line:1 char:1

所以我在想这样的东西可以起作用:

powershell { $web = "google.com" ; & ping.exe $web }

但它只在powershell控制台中工作,而不是在cygwin中,它cygwin说

-bash: syntax error near unexpected token `&'

因此,似乎&被视为bash字符。我试图用一千种方式逃离它,例如

bash -c "'powershell { $web = "google.com" ; & ping.exe $web }'"

但这是的输出

bash: powershell { $web = "google.com" ; & ping.exe $web }: command not found

谢谢你的提示。

更新

我可以做到这一点:

powershell "Invoke-Command -ScriptBlock {$env:FOO = "google.com" ; & ""C:myscript.ps1"" }"

但是,当我试图通过$env:FOO访问该FOO变量时,它是空的,似乎我无法这样做,因为该脚本正在另一个作用域中运行,或者什么。。。

此命令将把一个环境变量从cygwin($FOO="bar")传递给powershell,然后运行另一个列出环境变量的powershell命令(dir env:)(证明它已设置):

powershell "$env:FOO="bar";dir env:"

用脚本调用替换dir env:部分,这应该对您有效。

编辑:这是命令(引用略有不同),包括对外部脚本的调用:

powershell '$env:FOO="bar";& "C:script name.ps1"'

相关内容

  • 没有找到相关文章

最新更新