70

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

4

6 回答 6

90

当然。在我的(漂亮的香草)Cygwin 设置bash中,c:\cygwin\bin我可以使用如下命令从 Windows 批处理文件运行bash脚本(比如):testit.sh

C:\cygwin\bin\bash testit.sh

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

于 2013-04-01T02:45:14.517 回答
45

还有一件事——如果你在一些 Windows 文本编辑器中编辑了 shell 脚本,它会产生\r\n行尾,cygwin 的 bash 不会接受那些\r. dos2unix testit.sh在执行脚本之前运行:

C:\cygwin\bin\dos2unix testit.sh
C:\cygwin\bin\bash testit.sh
于 2013-09-12T19:15:46.340 回答
31

如果您可以访问 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/阅读更多信息

于 2014-02-27T16:04:41.467 回答
10

只是想补充一点,您可以这样做以对目录下的所有文件应用 dos2unix 修复,因为当我们不得不“修复”一堆脚本时,它为我节省了大量时间。

find . -type f -exec dos2unix.exe {} \;

我会将其作为对 Roman 的回答的评论,但我还无权发表评论。

于 2014-03-14T00:40:13.780 回答
4

现有答案似乎都在 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 控制台中运行。

于 2019-03-18T09:06:20.783 回答
1

如果您不介意在脚本文件名中始终包含 .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 即可运行

于 2015-12-19T20:08:57.510 回答