PowerShell是否已準備好在Windows上替換個人Cygwin shell? [關閉]

我在討論是否應該學習PowerShell,或者只是堅持使用Cygwin / Perl腳本/ Unix shell腳本等。 git

PowerShell的好處是,沒有Cygwin的隊友能夠更容易地使用這些腳本; 可是,我不知道我是否真的要編寫那麼多通用腳本,或者人們是否會使用它們。 程序員

Unix腳本是如此強大,PowerShell是否足夠接近切換? github

如下是我在PowerShell中尋找的一些具體事項(或等價物): shell

  • grep的
  • 分類
  • uniq的
  • Perl(PowerShell與Perl的功能有多接近?)
  • AWK
  • SED
  • file(提供文件信息的命令)
  • 等等

#1樓

您還能夠嘗試使用BashWin在Windows上運行Bash腳本,網址爲https://github.com/skanga/BashWin數據庫


#2樓

PowerShell中的cmdlet很是好,工做可靠。 因爲我是Java / C#開發人員,他們的面向對象對我頗有吸引力,但它根本不是一套完整的。 因爲它是面向對象的,所以錯過了POSIX工具集的不少文本流成熟度( awksed僅舉幾例)。 windows

我發現愛的OO技術和喜歡POSIX工具成熟的困境的最佳答案是使用二者! PowerShell的一個重要方面是它能夠很好地將對象管道傳輸到標準流。 PowerShell默認使用對象管道來傳輸其對象。 這些不是標準流(標準輸出,標準錯誤和標準輸入)。 當PowerShell須要將輸出傳遞給沒有對象管道的標準進程時,它首先將對象轉換爲文本流。 因爲它作得很好,PowerShell是託管POSIX工具的絕佳場所! bash

最好的POSIX工具集是GnuWin32 。 它確實須要5秒多的時間來安裝,可是值得一試,據我所知,它不會修改你的系統(註冊表, c:\\windows\\*文件夾等),除了將文件複製到您指定的目錄。 這是很是好的,由於若是您將工具放在共享目錄中,許多人能夠同時訪問它們。 服務器

GnuWin32安裝說明

下載並執行exe (它來自SourceForge站點 ),將其指向一個合適的目錄(我將使用C:\\bin )。 它將在那裏建立一個GetGnuWin32目錄,你將在其中運行download.bat ,而後運行install.bat (不帶參數),以後會有一個C:\\bin\\GetGnuWin32\\gnuwin32\\bin目錄,這是最有用的文件夾,曾經存在於Windows機器上。 將該目錄添加到您的路徑中,您就能夠開始了。 框架


#3樓

在幾行中,Cygwin和PowerShell是不一樣的工具,可是若是安裝了Cygwin,則能夠在PowerShell會話中運行Cygwin可執行文件。 我已經習慣了PowerShell,如今我再也不使用grep,sort,awk等。在PowerShell中有不少內置的替代品,若是沒有,你能夠在那裏找到一個cmdlet。 less

我發現本身使用的主要工具是ssh.exe,但在PowerShell會話中。

它很棒。


#4樓

爲何不一樣時使用? 在Cygwin中調用PowerShell腳本就像任何其餘解釋腳本同樣,如Perl等。

我這樣作了,我寫了https://bitbucket.org/jbianchi/powershell做爲Bash包裝器來調用Cygwin中的powershell.exe。 它能夠用做一個shebang做爲powershell.exe .ps1腳本的第一行(由於PowerShell也使用「#」做爲註釋)。 有關示例,請參閱https://bitbucket.org/jbianchi/powershell/wiki/Home


#5樓

我最近纔開始涉足任何嚴肅程度的PowerShell。 雖然在過去的七年裏我一直在幾乎徹底基於Windows的環境中工做,但我來自Unix背景,發現本身不斷嘗試「Unix-fy」我在Windows上的交互體驗。 至少能夠說是使人沮喪的。

將PowerShell與Bashtcshzsh之類的東西進行比較是公平的,由於grepsedawkfind等實用程序嚴格來講不是shell的一部分; 可是,它們始終是任何Unix環境的一部分。 像這就是說,一個PowerShell命令選擇字符串有一個很是相似的功能grep捆綁在PowerShell的核心模塊...這樣的線可有點模糊。

我認爲關鍵是文化 ,以及各個工具集將體現各自文化的事實:

  • Unix是基於文件的 (一般是非Unicode) 基於文本的文化。 配置文件幾乎都是文本文件。 另外一方面,Windows在配置格式方面老是更加結構化 - 配置一般保存在專有數據庫(例如,Windows註冊表)中,這些數據庫須要專門的管理工具。
  • Unix管理(以及多年來的開發)接口傳統上一直是命令行和虛擬終端。 的Windows開始做爲一個GUI和行政職能最近纔開始被徹底基於GUI移開。 咱們能夠期待命令行上的Unix體驗更豐富,更成熟,由於它在PowerShell上具備重要的領先優點,並且個人經驗與此相符。 在此,根據個人經驗:

    • Unix管理經驗旨在以最少的擊鍵次數輕鬆完成任務; 這多是因爲必須經過緩慢的9600波特撥號鏈接管理服務器的歷史狀況。 如今,PowerShell確實有一些別名能夠解決至關冗長的Verb-Noun標準,可是瞭解這些別名有點痛苦(任何人都知道比alias | where {$_.ResolvedCommandName -eq "<command>"}更好: alias | where {$_.ResolvedCommandName -eq "<command>"} ?)。

      能夠操縱歷史的豐富方式的一個例子:

      iptables命令一般是冗長的,若是它不是Bash中內置的歷史操做的許多簡潔功能之一,那麼重複它們會有輕微的差別,因此插入iptables規則以下:

      iptables -I camera-1-internet -s 192.168.0.50 -m state --state NEW -j ACCEPT

      另外一個相機(「 camera-2 」)的第二次,只是發出一個案例:

      !!:s/-1-/-2-/:s/50/51

      這意味着「執行先前的命令,但替代-1--2-5051

    • Unix體驗針對觸摸打字員進行了優化; 一我的能夠在不離開「家」位置的狀況下完成全部工做。 例如,在Bash中 ,使用Emacs鍵綁定(是的,Bash也支持vi綁定),使用Ctrl-P和Ctrl-N完成歷史循環,同時使用Ctrl-移動到行的開頭和結尾。 分別是A和Ctrl-E ......它確定不會在那裏結束。 嘗試在PowerShell控制檯中進行最簡單的導航,而無需離開原位並遇到麻煩。

    • 簡單的東西,好比Unix上的多功能分頁( 很多 )在PowerShell中彷佛沒有開箱即用,這有點使人沮喪,並且豐富的編輯器經驗也不存在。 固然,人們老是能夠下載填補這些空白的第三方工具,但若是這些東西只是「存在」就行了,就像它們幾乎任何類型的Unix同樣。
  • Windows文化,至少在系統API方面,很大程度上是由支持框架驅動的,即COM.NET ,它們都是高度結構化的和基於對象的。 另外一方面,Unix API的訪問傳統上是經過文件接口( /dev/proc )或(非面向對象的)C風格的庫調用。 所以腳本體驗與其各自的OS範例相匹配也就不足爲奇了。 PowerShell本質上是結構化的(一切都是對象)和基於文件的Bash -and-friends。 PowerShell程序員可使用的結構化API很是龐大(基本上與現有的標準COM和.NET接口集合至關)。

簡而言之,雖然PowerShell的腳本功能能夠說比Bash更強大(特別是考慮到.NET BCL的可用性),可是交互式體驗明顯變弱,特別是若是你是從徹底由鍵盤驅動的,基於控制檯的視角(儘量多的Unix頭)。

相關文章
相關標籤/搜索