2012-02-16 238 views
0

Powershell是伟大的脚本。但是当涉及到日常使用时,某些事情可能是一个巨大的PITA!将cygwin bin目录添加到powershell路径环境变量中... cygwin内powershell

,所以我认为这将是巨大的,如果我可以做这样的事情在我profile.ps1:

$env:path = "$($env:path);c:\cygwin\bin" 

以访问像焦油,ZIP等公用设施......但这并不工作。可变期待权当我这样做:

PS > $env:path 

但是当我尝试这样做,比方说,

PS > unzip foo.zip 

我得到命令没有找到错误类型。

WTF PowerShell!?

编辑:伟大的答案!今天早上我用新鲜的眼睛看着它,意识到我只需要正确拼写'cygwin'!现在我不必在两个控制台之间来回切换。对于任何使用这个技巧的人来说,你在powershell中的路径是按顺序评估的 - 如果你把c:\ cygwin \ bin放在$ env:path变量的末尾,它会被最后搜索,所以它赢得了'不会干扰现有的powershell别名/ cmdlet。

回答

-2

默认情况下,PowerShell只会修改其本地PATH副本。当你运行一个外部命令时,他们不会看到本地环境变量。

每本TechNet article,你可以回落到.NET静态方法SetEnvironmentVariable方法在用户级别要做到这一点,如果你想这是一个永久性的变化:

[Environment]::SetEnvironmentVariable("TestVariable", "Test value.", "User") 
+0

虽然'$ env:path'是进程级别,它应该仍然适用于OP正在尝试做的事情。使用Environment.SetEnvironmentVariable只需将其设置为用户级别即可。 – manojlds 2012-02-16 04:07:57

+0

啊,真的。我没有注意到他正在根据环境变量进行调用,而不是假定外部过程需要它。 – 2012-02-16 05:56:45

0

它的工作对我来说:

要设置您的个人资料:

$command = '$env:path = $env:path + ";C:\Program Files\Notepad++"' 
$command | Out-File -FilePath $PROFILE -Append -Encoding UTF8 

或者只是当前shell:

$env:path = $env:path + ";C:\Program Files\Notepad++" 
0

使用$env:path将cygwin bin添加到PATH应该工作,只要您尝试在相同的Powershell会话中使用它。如果您打开一个新的控制台,或者如果您关闭并打开Powershell,它将不会被保留。否则,你在做什么应该工作。确保你确实添加了正确的路径。如果您想坚持更改,请将该行添加到您的$profile

此外,请尝试使用Mingw/Msys/Msysgit实用程序。我发现Mingw比cygwin更轻量级(如果你正在使用cygwin来获得一些这些utils)