在Windows上通过Cygwin运行一个shell脚本

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

当然。 在我的(漂亮的香草)Cygwin安装程序中, bash位于c:\cygwin\bin所以我可以使用如下命令从Windowsbatch file运行bash脚本(如testit.sh ):

 C:\cygwin\bin\bash testit.sh 

…可以很容易地包含在.bat文件中,因为它可以在命令行input,并具有相同的效果。

还有一件事情 – 如果你在一些产生\r\n行尾的Windows文本编辑器中编辑了shell脚本,cygwin的bash将不会接受那些\r 。 在执行脚本之前只需运行dos2unix testit.sh

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

如果您有权访问Windows上的Notepad ++编辑器,则可以轻松解决此问题:

  1. 在Notepad ++中打开提供错误的文件。
  2. 在“编辑”菜单下select“EOL Conversion”
  3. 有一个选项“UNIX / OSX格式”。 select该选项。
  4. 重新保存文件。

我做到了这一点,它解决了我的问题。

希望这可以帮助!

阅读更多在http://danieladeniji.wordpress.com/2013/03/07/microsoftofthewindows-cygwin-error-r-command-not-found/

只是想补充一点,你可以这样做,为一个目录下的所有文件应用dos2unix修复,因为当我们不得不“修复”一堆脚本的时候,它为我节省了大量的时间。

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

我会把它作为罗马的答案的评论,但我还没有获得评论。

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

为了显示:
1.始终将.sh添加到脚本文件名中,例如test1.sh
2. test1.sh看起来像下面这样一个例子:
#!/bin/bash echo '$0 = ' $0 echo '$1 = ' $1 filepath=$1 3.在Windows上用Cygwininput“test1.sh”运行
4.在Unix上,你也input“test1.sh”来运行

注意:在Windows上,您需要使用文件资源pipe理器执行以下操作:
1.打开文件资源pipe理器
2.右键点击扩展名为.sh的文件,如test1.sh
3.用…打开 – >selectsh.exe
在此之后,您的Windows 10会记得使用sh.exe执行所有.sh文件。

注意:使用这种方法,你不需要用bash预先编写脚本文件名来运行