如何为来自cygwin的powershell传播windows环境变量

时间:2012-12-11 14:54:50

标签: windows bash powershell cygwin

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

powershell "& ""C:\my\script.ps1"""

这按预期工作,我必须这样做,因为在那个脚本中我正在执行另一个外部命令等等......

我想在该脚本中添加一些环境变量,所以我想编写类似

的内容
powershell "$FOO="bar"; & ""C:\my\script.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:\my\script.ps1"" }"

但是当我尝试通过FOO访问$env:FOO变量时它是空的,似乎我无法这样做,因为该脚本在另一个范围内运行或者是什么...... / p>

1 个答案:

答案 0 :(得分:0)

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

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

用脚本调用替换dir env:部分,这应该适合您。

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

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