2012-02-16 53 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)