在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 ++编辑器,则可以轻松解决此问题:
- 在Notepad ++中打开提供错误的文件。
- 在“编辑”菜单下select“EOL Conversion”
- 有一个选项“UNIX / OSX格式”。 select该选项。
- 重新保存文件。
我做到了这一点,它解决了我的问题。
希望这可以帮助!
只是想补充一点,你可以这样做,为一个目录下的所有文件应用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预先编写脚本文件名来运行