如何在Windows命令提示符下运行.sh?


132

如何在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)脚本,这是我.sh在Windows上运行文件的唯一方法。
ha9u63ar 2014年

Answers:


54

错误消息表明您尚未安装bash,或者它不在您的计算机中PATH

Google最受欢迎的网站是http://win-bash.sourceforge.net/,但您还需要了解,大多数Bash脚本都希望使用类似Unix的环境。因此,除非专门针对此特定使用场景设计了Bash,否则仅安装Bash可能不太可能允许您运行在网上找到的脚本。常见的解决方案是https://www.cygwin.com/,但是有很多可能的选择,具体取决于您要实现的目标。

如果Windows不是您使用情况的中心,那么安装免费的OS(可能是虚拟的)可能是最简单的方法。

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


1
当然,使用Windows 10,您可以启用WSL,并且Windows内几乎有一台真正的计算机。
三人房

147

安装GIT。在安装GIT的过程中,通过选择GIT Bash选项将其添加到Windows上下文菜单。安装后,右键单击您的文件夹,选择GIT Bash Here(请参阅附件图片),然后使用sh命令,例如:

sh test.sh

在此处输入图片说明


1
它对我不起作用。打开命令提示符窗口,然后快速关闭。
绝妙的

27
如果已安装GIT,则可以将路径添加到PATH系统变量sh.exe。就我而言是:c:\Program Files\Git\bin。然后sh .\script.sh从PowerShell 运行
elshev '17

1
这对我来说就像是2020年Windows 10中的魅力!虽然复制/粘贴命令对我不起作用,因为它固定在ctrl-insshift-ins
Nam G VU

51

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

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

另一个不错的选择是安装CygWin

Windowshome位于:

C:\cygwin64\home\[user]

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

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

43
除非您已采取特殊措施来获取它,否则您将不会sh在Windows上使用命令。
user2357112支持莫妮卡

1
好的-1,您是说我必须添加一个教程才能从命令行访问sh吗???
Jorgesys '16

41
给出的答案就像您希望能够sh在任意Windows命令提示符下键入并使之正常工作一样。
user2357112支持Monica 2016年

msys2是获取sh命令的好地方。如果要与cmd一起使用,请查看github.com/userzimmermann/MSYS2-cmd
Aralox

3
sh如果选择“安装Bash”安装选项,则Bash和命令将随Git4Windows一起安装。
乔尔·埃利斯

13

您也可以使用cmder

Cmder是一个软件包,它是由于Windows上缺少漂亮的控制台模拟器而完全出于沮丧而创建的。它基于出色的软件,并采用了Monokai配色方案和自定义的提示布局,从一开始就看起来很性感

屏幕截图

cmder.net


1
尽管它似乎带有一个可选的附加包,其中包含常见的Unix shell命令,但基本包似乎只是对它的替代cmd
三胞胎

5

在Windows 10周年更新中,在Windows上的ubuntu上使用bash运行shell命令甚至更简单

我试图为x-wrt ​​r7000 netgear路由器设置区域,我发现以下对我有用:在Windows上的ubuntu上使用bash,您必须启用Windows功能中的子系统,并在

ssh admin@192.168.1.1 < /mnt/c/ccode-eu.sh

可能会运行。但这是一个完全不同的环境。
TamusJRoyce

4

Windows中的新功能-在Windows的ubuntu上运行bash-在构建会议之后的Windows 10“ Insiders”构建中可用:

https://blogs.windows.com/buildingapps/2016/03/30/run-bash-on-ubuntu-on-windows/


不错,但是您如何使用来运行sh文件bash?如果我尝试这样做,则窗口只会闪烁并消失。如果我将文件拖放到打开的bash窗口中,则表示找不到该路径(因为它使用了不同的约定)。
m93a

现在是否可以在Windows上运行.sh文件?我现在不能尝试,但我对此感兴趣
。– JesusMurF

1
我自己还没有尝试过,但是微软有一个有关如何在Windows上运行sh的指南:docs.microsoft.com/en-us/windows/wsl/install-win10
claudiu.nicola

@ m93a在Ubuntu终端窗口中,bash path/to/script运行脚本。sh在Ubuntu中当然也有。如果脚本具有适当的shebang和权限,只需path/to/script使用shebang中指定的rnterpreter 即可运行该脚本。
Tripleee '18

4

我个人使用了此批处理文件,但它确实需要安装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% %*'

基于原始工作。


0

我按照此处的指导在Windows 10中使用Windows 10 Bash shell aka Linux Subsystem aka Ubuntu

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.