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头)。

相关文章
相关标签/搜索