我有一堆原本在Linux机器上运行的shell脚本,现在我们已经切换到Windows,我需要在那里运行这些脚本。我已经安装了Cygwin,但是有没有办法让脚本使用Cygwin运行,但是从Windows批处理中进行调用?
我有一堆原本在Linux机器上运行的shell脚本,现在我们已经切换到Windows,我需要在那里运行这些脚本。我已经安装了Cygwin,但是有没有办法让脚本使用Cygwin运行,但是从Windows批处理中进行调用?
bash
在 c:\cygwin\bin
中,因此我可以使用类似以下命令的Windows批处理文件来运行bash
脚本(例如testit.sh
):C:\cygwin\bin\bash testit.sh
...可以和在命令行中输入一样容易地包含在.bat
文件中,并具有相同的效果。
还有一件事 - 如果您使用某个Windows文本编辑器编辑了shell脚本,该编辑器会生成\r\n
行结尾符,则cygwin的bash将无法接受那些\r
。在执行脚本之前,请先运行dos2unix testit.sh
:
C:\cygwin\bin\dos2unix testit.sh
C:\cygwin\bin\bash testit.sh
想补充一下,你可以用这种方法在一个目录下为所有文件应用 dos2unix 修复程序,当我们需要“修复”一堆脚本时,这个方法省了我很多时间。
find . -type f -exec dos2unix.exe {} \;
我会把它作为对Roman回答的评论,但我还没有评论的权限。
D:\apps\cygwin64\bin\mintty.exe -i /Cygwin-Terminal.ico bash.exe .\myShellScript.sh
...这将导致脚本在Cygwin BASH控制台中运行,而不是Windows DOS控制台。
echo -n hello
,当Cygwin运行时,输出将为hello
,而当Windows命令解释器运行时,输出将为-n hello
。我认为更可能的解释是路径在bash
中没有被正确设置,因此我会检查bash
是否正确读取.profile
或.bash_profile
。 - Simon