在Windows上通过Cygwin运行shell脚本

时间:2013-04-01 02:30:42

标签: batch-file cygwin

我有一堆用于在Linux机器上运行的shell脚本。现在,我们已切换到Windows,我需要在那里运行这些脚本。我安装了Cygwin,但有没有办法让脚本使用Cygwin运行,但调用是从Windows批处理进行的?

6 个答案:

答案 0 :(得分:78)

不确定。在我的(漂亮的香草)Cygwin设置中,bashc:\cygwin\bin中,因此我可以使用以下命令从Windows批处理文件运行bash脚本(例如testit.sh):

C:\cygwin\bin\bash testit.sh

...可以像在命令行中输入的那样轻松地包含在.bat文件中,并具有相同的效果。

答案 1 :(得分:38)

还有一件事 - 如果您在某些Windows文本编辑器中编辑了shell脚本,这会生成\r\n行结尾,则cygwin的bash将不接受这些\r。只需在执行脚本之前运行dos2unix testit.sh

C:\cygwin\bin\dos2unix testit.sh
C:\cygwin\bin\bash testit.sh

答案 2 :(得分:25)

如果您可以访问Windows上的Notepad ++编辑器,则可以使用一项功能轻松解决此问题:

  1. 在Notepad ++中打开发出错误的文件。
  2. 转到“修改”菜单下,选择“EOL转换”
  3. “UNIX / OSX格式”有一个选项。选择该选项。
  4. 重新保存文件。
  5. 我这样做了,它解决了我的问题。

    希望这有帮助!

    http://danieladeniji.wordpress.com/2013/03/07/microsoft-windows-cygwin-error-r-command-not-found/

    了解详情

答案 3 :(得分:8)

只是想补充一点,你可以这样做来为目录下的所有文件应用dos2unix修复,因为它为我们必须修复'节省了大量时间。我们的一堆脚本。

find . -type f -exec dos2unix.exe {} \;

我这样做是为了回答罗马的回答,但我还没有机会发表评论。

答案 4 :(得分:1)

如果您不介意在脚本文件名上始终包含.sh,那么您可以为Cygwin和Unix(Macbook)保留相同的脚本。

举例说明:
1.始终在脚本文件名中包含.sh,例如test1.sh
2. test1.sh看起来像下面的例子:
#!/bin/bash echo '$0 = ' $0 echo '$1 = ' $1 filepath=$1 3.在带有Cygwin的Windows上,键入" test1.sh"运行
4.在Unix上,你也输入" test1.sh"运行


注意:在Windows上,您需要使用文件资源管理器执行以下操作:
1.打开文件浏览器
2.右键单击扩展名为.sh的文件,如test1.sh
3.打开... - >选择sh.exe
在此之后,Windows 10会记住使用sh.exe执行所有.sh文件
注意:使用此方法,您无需在bash之前添加脚本文件名即可运行

答案 5 :(得分:1)

现有答案似乎都在DOS控制台窗口中运行此脚本。

这可能是可以接受的,但是例如,这意味着颜色代码(更改文本颜色)不起作用,而是照原样打印出来:

  

没有项目“ [032mGroovy [0m]”

我前一段时间找到了这个解决方案,所以不确定mintty.exe是否是标准的Cygwin实用程序,还是不确定是否必须运行setup程序才能获得它,但是我却像这样运行:

D:\apps\cygwin64\bin\mintty.exe -i /Cygwin-Terminal.ico  bash.exe .\myShellScript.sh

...这将导致脚本在Cygwin BASH控制台而不是Windows DOS控制台中运行。