我有一堆用于在Linux机器上运行的shell脚本。现在,我们已切换到Windows,我需要在那里运行这些脚本。我安装了Cygwin,但有没有办法让脚本使用Cygwin运行,但调用是从Windows批处理进行的?
答案 0 :(得分:78)
不确定。在我的(漂亮的香草)Cygwin设置中,bash
在c:\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 ++编辑器,则可以使用一项功能轻松解决此问题:
我这样做了,它解决了我的问题。
希望这有帮助!
在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看起来像下面的例子:
3.在带有Cygwin的Windows上,键入" test1.sh"运行#!/bin/bash
echo '$0 = ' $0
echo '$1 = ' $1
filepath=$1
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控制台中运行。