在Windows上通过Cygwin运行shell脚本

rai*_*n_s 61 cygwin batch-file

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

Sim*_*mon 81

当然.在我(相当香草)Cygwin的设置,bash是在c:\cygwin\bin这样我就可以运行一个bash脚本(比如testit.sh使用像这样的命令Windows批处理文件):

C:\cygwin\bin\bash testit.sh
Run Code Online (Sandbox Code Playgroud)

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

  • 只是提醒一下:设置PATH = C:\ cygwin64\bin;%PATH%&& C:\ cygwin64\bin\bash testit.sh (4认同)

Rom*_*cke 39

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

C:\cygwin\bin\dos2unix testit.sh
C:\cygwin\bin\bash testit.sh
Run Code Online (Sandbox Code Playgroud)


jse*_*als 26

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

  1. 在Notepad ++中打开给出错误的文件.
  2. 转到"编辑"菜单,然后选择"EOL转换"
  3. "UNIX/OSX格式"有一个选项.选择该选项.
  4. 重新保存文件.

我这样做了,它解决了我的问题.

希望这可以帮助!

欲了解更多信息,请访问http://danieladeniji.wordpress.com/2013/03/07/microsoft-windows-cygwin-error-r-command-not-found/

  • 对于Sublime Text用户,它是View-> Line Endings-> Unix (3认同)

tsa*_*lic 9

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

find . -type f -exec dos2unix.exe {} \;
Run Code Online (Sandbox Code Playgroud)

我这样做是为了回答Roman的答案,但我还没有评论.