我有一堆曾经在 Linux 机器上运行的 shell 脚本。现在,我们已经切换到 Windows,我需要在那里运行这些脚本。我安装了Cygwin,但是有没有办法让脚本使用 Cygwin 运行,但是调用是从 Windows 批处理进行的?
6 回答
当然。在我的(漂亮的香草)Cygwin 设置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
如果您可以访问 Windows 上的 Notepad++ 编辑器,则有一项功能可让您轻松解决此问题:
- 在 Notepad++ 中打开出现错误的文件。
- 进入“编辑”菜单并选择“EOL 转换”
- “UNIX/OSX 格式”有一个选项。选择该选项。
- 重新保存文件。
我这样做了,它解决了我的问题。
希望这可以帮助!
在http://danieladeniji.wordpress.com/2013/03/07/microsoft-windows-cygwin-error-r-command-not-found/阅读更多信息
只是想补充一点,您可以这样做以对目录下的所有文件应用 dos2unix 修复,因为当我们不得不“修复”一堆脚本时,它为我节省了大量时间。
find . -type f -exec dos2unix.exe {} \;
我会将其作为对 Roman 的回答的评论,但我还无权发表评论。
现有答案似乎都在 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 控制台中运行。
如果您不介意在脚本文件名中始终包含 .sh,那么您可以为 Cygwin 和 Unix (Macbook) 保留相同的脚本。
举例说明:
1. 始终在脚本文件名中包含 .sh,例如 test1.sh
2. test1.sh 示例如下所示:
3. 在装有 Cygwin 的 Windows 上,键入“test1.sh”以运行
4 . 在 Unix 上,你也可以输入“test1.sh”来运行
#!/bin/bash
echo '$0 = ' $0
echo '$1 = ' $1
filepath=$1
注意:在 Windows 上,您需要使用文件资源管理器执行以下操作:
1. 打开文件资源管理
器 2. 右键单击扩展名为 .sh 的文件,例如 test1.sh
3. 打开方式... -> 选择sh.exe
在此之后,您的 Windows 10 会记住使用 sh.exe 执行所有 .sh 文件。
注意:使用此方法,您无需在脚本文件名前加上 bash 即可运行