如何在Windows命令提示符中运行.sh文件?

217

我该如何在Windows 7命令提示符上运行.sh文件?每次尝试运行此代码时,我都会遇到这个错误:

app/build/build.sh

错误,

'app' is not recognized...

或者,

bash app/build/build.sh

错误,

'bash' is not recognized...

我错过了什么?

这是屏幕截图, 输入图片说明


6
你需要使用Cygwin(可能)。你想在Windows系统上运行SHELL(.sh)脚本,这是我在Windows上运行.sh文件的唯一方法。 - ha9u63a7
11个回答

304

安装GIT。在安装GIT期间,通过选择选项将GIT Bash添加到Windows上下文菜单中。安装完成后,在您的文件夹中右键单击,选择GIT Bash Here(参见附图),然后像以下示例一样使用sh命令:


sh test.sh

输入图像描述


1
它对我不起作用。一个命令提示窗口打开然后很快关闭。 - desbest
63
如果您已经安装了GIT,您可以将sh.exe的路径添加到PATH系统变量中。在我的情况下,路径是:c:\Program Files\Git\bin。然后从PowerShell运行sh .\script.sh - elshev
2
这在2020年的Windows 10上对我非常有效!尽管复制/粘贴命令对我不起作用,因为它被设置为ctrl-insshift-ins - Nam G VU
3
如果您正在使用VS Code,可以使用Git Bash终端来运行.sh文件。与上面的回答相同,但保持在VS Code内部。 - Mxblsdl

70

错误信息表明您尚未安装 bash 或者它不在您的 PATH 中。

最热门的谷歌搜索结果为 http://win-bash.sourceforge.net/,但您还需要了解大多数 Bash 脚本都需要一个类 Unix 的环境。因此,仅仅安装 Bash 可能不能让您运行从网上找到的脚本,除非这些脚本特别设计用于该使用场景。通常的解决方法是https://www.cygwin.com/,但是根据您想要完成的具体任务,可能有很多其他可行的替代方案。

如果 Windows 对您的使用场景不是核心需求,安装一个免费的操作系统(或者虚拟化)可能是最简单的方法。

第二个错误信息是由于 Windows 原则上接受正斜杠作为目录分隔符,但是在这种情况下,它被解释为开关分隔符。换句话说,Windows 解析您的命令行为 app /build /build.sh (或者用 Unix 选项约定来说,app --build --build.sh)。您可以尝试使用 app\build\build.sh,但是由于上述情况,它不太可能起作用。


4
当然,使用Windows 10,你可以启用WSL几乎在Windows系统内拥有一台真正的计算机。 - tripleee

65

运行.sh文件最常用的方法是使用sh命令:

C:\>sh my-script-test.sh 

另一个好的选择是安装CygWin

Windows中,home位于:

C:\cygwin64\home\[user]

例如,我使用bash命令执行我的my-script-test.sh文件:

jorgesys@INT024P ~$ bash /home/[user]/my-script-test.sh 

79
除非你采取了特殊措施,否则在Windows上你将没有一个sh命令。 - user2357112
1
好的,你的意思是我必须添加一个教程才能从命令行访问sh吗? - Jorgesys
66
你的回答给人的感觉好像你希望能够在任意的Windows命令提示符中输入“sh”并使其起作用。 - user2357112
msys2是获取sh命令的好地方。如果您想在cmd中使用它,请查看https://github.com/userzimmermann/MSYS2-cmd - Aralox
3
如果您选择安装程序中的“安装Bash”选项,Git4Windows将会默认安装Bash和sh命令。 - Joel Ellis
1
这不直接适用于命令提示符,但在Git Bash中可以使用,正如Joel Ellis所说。 - Oshada

15

你也可以使用Cmder

Cmder是一个软件包,由于Windows上缺乏好的终端模拟器而产生的纯粹的沮丧。它基于惊人的软件,并加入了Monokai颜色方案和自定义提示布局,从一开始就看起来非常酷。

屏幕截图

cmder.net


3
尽管似乎可以选择添加包含常见Unix Shell命令的附加包,但基础软件包似乎只是cmd的替代品。 - tripleee

8
在Windows操作系统中安装 GitBash 工具,并将以下路径添加到系统环境变量中,以完成Git的安装。

<C:\ 中的Program Files>\Git\bin

<C:\ 中的Program Files>\Git\usr\bin

cmd 窗口中输入 'sh' 以进入 Bourne shell 并在终端中运行您的命令。

1
Git Bash随GIT for Windows一同提供。 - Kevin

7
在Windows 10周年更新版中,使用bash在Windows上运行shell命令变得更加容易。我试图为我的x-wrt r7000 netgear路由器设置地区,我发现以下方法适用于我,在Windows功能中启用子系统并打开开发者模式后,可以使用bash在Windows上完成操作。
ssh admin@192.168.1.1 < /mnt/c/ccode-eu.sh

1
可能会运行,但它是完全不同的环境。 - TamusJRoyce

6

只需安装 Git 并使用 "bash <name.sh>" 命令运行您的 .sh 文件。


5

我个人使用这个批处理文件,但是需要已安装CygWin(64位如图所示)。 只需将文件类型.SH与此批处理文件(在我的情况下是ExecSH.BAT)关联起来,然后您就可以双击.SH文件运行它。

@echo off
setlocal

if not exist "%~dpn1.sh" echo Script "%~dpn1.sh" not found & goto :eof

set _CYGBIN=C:\cygwin64\bin
if not exist "%_CYGBIN%" echo Couldn't find Cygwin at "%_CYGBIN%" & goto :eof

:: Resolve ___.sh to /cygdrive based *nix path and store in %_CYGSCRIPT%
for /f "delims=" %%A in ('%_CYGBIN%\cygpath.exe "%~dpn1.sh"') do set _CYGSCRIPT=%%A
for /f "delims=" %%A in ('%_CYGBIN%\cygpath.exe "%CD%"') do set _CYGPATH=%%A

:: Throw away temporary env vars and invoke script, passing any args that were passed to us
endlocal & %_CYGBIN%\mintty.exe -e /bin/bash -l -c 'cd %_CYGPATH%;  %_CYGSCRIPT% %*'

Based on this original work.


5

很酷,但是如何使用bash运行sh文件呢?如果我尝试这样做,窗口会闪烁并消失。如果我将文件拖放到已打开的bash窗口中,它会显示路径未找到(因为它使用不同的约定)。 - m93a
现在是否可以在Windows上运行.sh文件?我现在无法尝试,但我很感兴趣。 - JesusMurF
1
我自己没有尝试过,但是微软有一份关于如何在Windows上运行sh的指南:https://learn.microsoft.com/en-us/windows/wsl/install-win10 - claudiu.nicola
在Ubuntu终端窗口中,使用“bash path/to/script”运行脚本。在Ubuntu中也有“sh”。如果脚本具有适当的shebang和权限,则只需使用“path/to/script”即可使用shebang中指定的解释器运行它。 - tripleee

4
我使用 Windows 10 的 Bash shell,也称为 Linux 子系统或 Ubuntu in Windows 10。这里有指导链接

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接