替代bash for windows /或帮助cygwin执行特定任务

时间:2011-05-24 15:13:11

标签: windows bash shell

我的目标:创建一套脚本,执行一些常见的系统任务,包括这些

  • 复制/移动/列表/搜索/ grep文件
  • 观看/开始/停止流程
  • 通过sqlplus
  • 对Oracle运行查询

我已经习惯使用Cygwin / bash来缓解我的工作生活,坦率地说,我不想放弃bash语言并开始学习PowerShell,所以我开始寻找一种方法来运行Windows上的bash脚本,...最好是替代Cygwin的东西。

事实是,我对Cygwin的安装仍然不满意,并且没有简单的方法,它瞄准或多或少的专家用户,并且有很多事情可能会出现在安装。我的意思是。我现在要做的是编写一套脚本,这些脚本的目标人物不是我的专家(我绝不是真正的专家) - 在大多数情况下,某种管理员不想知道脚本细节。

我认为这个用户也希望能够在另一台机器上运行这些脚本,我希望能够解释他/她如何做到这一点,而不是说,打电话给支持,而且,我,最终(这样我们就可以在另一台机器上安装cygwin等)。

我尝试过MinGW(msys),但它也需要手动步骤来设置 - 我的意思是,这些手动步骤已成为这些Windows端口事实上的标准(对不起,也许我有吹牛的心情)。 win-bash看起来它可能是一个解决方案,但我最终也捣乱它,因为旧的bash版本,以及它无法做我能在cygwin中做的事情 - 特别是

  • 此处文件
  • 像“cmd / C dir *”之类的东西(不知道为什么) - 是的,我做cmd / C目录,我在某种共享网络文件夹中有数千个文件,而且ls明显变慢比迪尔

我的问题最后:

  • 我注定要使用PowerShell吗?我想,如果我必须
  • ,我将不情愿地
  • 是否有一个简单的预包装“苗条”cygwin安装..或者,便携式cygwin,甚至更好?在sourceforge上有一个cygwin-portable项目,但它并不需要那些手动步骤,显然 - 有没有办法自动化这些步骤呢?如果有的话,我想知道为什么有人还没有这样做过? - 然后,是否可以使用像“bash somescript.sh”这样的简单命令从Windows命令提示符调用bash脚本?

感谢您的关注。

4 个答案:

答案 0 :(得分:1)

如果你包装了cygwin安装过程,对于技术水平较低的用户来说应该是可以接受的。

使用命令行参数可以简化cygwin安装; http://sources.redhat.com/ml/cygwin-apps/2003-03/msg00526.html

您还可以通过cyg-apt自动安装大多数cygwin软件包。

答案 1 :(得分:1)

作为mentioned here,Cygwin安装完全可以编写脚本并进行参数化,以便以静默和自动模式运行。

如果您定义了所需的最小cygwin包列表,只需使用一个调用cygmin setup可执行文件的.bat脚本

setup.exe --packages=list_of_packages_you_need --quiet-mode

答案 2 :(得分:1)

我还没有验证这一点,但我怀疑msys通过创建系统命令的Windows可执行版本来实现* nix看起来相似。所有常用命令在我安装的msys上都有可执行文件。如果这是真的那么应该可以将它们与完整安装分开使用。

尝试将“bash.exe”,“cp.exe”等从msys bin目录复制到没有msys安装的计算机/ vm,看看它是否有效。您可能还需要复制一些dll或共享库。 Windows依赖检查程序将显示可执行文件正在使用的dll。

您可以将您使用的内容打包并制作一个简单的安装程序,或者只使用您的脚本复制文件。

答案 3 :(得分:0)

看看MKS Toolkit。与Cygwin不同,它可以存在于Windows世界中。文件以CR / LF结尾,如Windows文件,你没有/ cygdrive / c的东西。裸机驱动器号可以在MKS Toolkit中正常工作。

一些警告:

  • 我很长时间没有使用过MKS Toolkit。请参阅以下原因。
  • MKS Toolkit(坐下来)每个许可证600美元。哎哟!这就是为什么我使用Cygwin,即使我认为它不是那么好或者效果也不错。
  • 这是基于Kornshell而不是Bash(虽然这可能有点不同)。 Kornshell和BASH的相似度为95%。但是,最后5%的人会得到你。在很多方面,我其实比Kornshell更喜欢BASH。 Kornshell的print语句优于echo语句。变量名称不会在块中消失。您可以轻松地执行双循环,因为几乎所有命令都可以使用unit个输入和输出。但是,Kornshell在提示符中没有那些整齐的转义字符,并且很难在管道中间找到命令的退出状态。