【问题标题】:Running a shell script through Cygwin on Windows在 Windows 上通过 Cygwin 运行 shell 脚本
【发布时间】:2013-03-22 03:23:08
【问题描述】:

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

【问题讨论】:

    标签: batch-file cygwin


    【解决方案1】:

    当然。在我的(相当普通的)Cygwin 设置中,bash 位于 c:\cygwin\bin 中,因此我可以使用以下命令从 Windows 批处理文件中运行 bash 脚本(比如 testit.sh):

    C:\cygwin\bin\bash testit.sh
    

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

    【讨论】:

    • 提醒一下:set PATH=C:\cygwin64\bin;%PATH% && C:\cygwin64\bin\bash testit.sh
    • 当我尝试这个时,我从 shell 脚本命令中得到错误,“mkdir: command not found”。似乎 shell 脚本是由 Windows 执行的,而不是 cygwin?
    • @swv:这很容易测试。例如,如果您将echo -n hello 放在脚本testit.sh 中,当由Cygwin 运行时,输出将为hello,当由Windows 命令解释器运行时,输出将为-n hello。我希望更可能的解释是bash 中的路径设置不正确,所以我会检查bash 是否正确读取.profile.bash_profile
    • 嘿我得到一个“发现:参数格式不正确”..它不识别 bash 命令?即使我可以在 cygwin 中运行它...
    • @ScipioAfricanus:您可能使用的是 Windows find.exe 而不是 bash 版本 - 例如,请参阅 Find: Parameter format not correct
    【解决方案2】:

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

    C:\cygwin\bin\dos2unix testit.sh
    C:\cygwin\bin\bash testit.sh
    

    【讨论】:

      【解决方案3】:

      如果您可以访问 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/

      【讨论】:

      • 对于 Sublime Text 用户,它是 View->Line Endings->Unix
      【解决方案4】:

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

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

      我想作为对 Roman 的回答的评论,但我还没有评论的权限。

      【讨论】:

        【解决方案5】:

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

        【讨论】:

          【解决方案6】:

          如果您不介意在脚本文件名中始终包含 .sh,那么您可以为 Cygwin 和 Unix (Macbook) 保留相同的脚本。

          举例说明:
          1. 始终在脚本文件名中包含 .sh,例如 test1.sh
          2. test1.sh 示例如下:
          #!/bin/bash echo '$0 = ' $0 echo '$1 = ' $1 filepath=$1 3. 在装有 Cygwin 的 Windows 上,键入“test1.sh”运行
          4. 在 Unix 上,你也可以输入“test1.sh”来运行


          注意:在 Windows 上,您需要使用文件资源管理器执行以下操作:
          1.打开文件资源管理器
          2. 右键单击​​扩展名为 .sh 的文件,例如 test1.sh
          3. 打开... -> 选择 sh.exe
          在此之后,您的 Windows 10 会记住使用 sh.exe 执行所有 .sh 文件。

          注意:使用此方法,您无需在脚本文件名前加上 bash 即可运行

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-03-30
            • 2011-07-27
            相关资源
            最近更新 更多