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

Posted

技术标签:

【中文标题】如何在 Windows 命令提示符下运行 .sh?【英文标题】:How to run .sh on Windows Command Prompt? 【发布时间】:2014-12-18 19:23:52 【问题描述】:

如何在 Windows 7 命令提示符上运行 .sh?当我尝试在其中运行此行时,我总是收到此错误,

app/build/build.sh

错误,

'app' is not recognized...

或者,

bash app/build/build.sh

错误,

'bash' is not recognized...

任何想法我错过了什么?

这里是屏幕抓取,

【问题讨论】:

你需要 cygwin(可能)。您正在尝试在 Windows 上运行 SHELL (.sh) 脚本,这是我在 Windows 上运行 .sh 文件的唯一方法。 【参考方案1】:

错误提示说明你没有安装bash,或者你的PATH中没有。

Google 最热门的搜索结果是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,但由于上述情况,它不太可能奏效。

【讨论】:

当然,在 Windows 10 中,您可以启用 WSL,并且在您的 Windows 中几乎拥有一台真正的计算机。【参考方案2】:

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

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

其他不错的选择是安装CygWin

Windowshome 位于:

C:\cygwin64\home\[user]

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

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

【讨论】:

除非您采取了特殊措施来获取它,否则您不会在 Windows 上使用 sh 命令。 好吧 -1 ,你的意思是我必须添加一个教程才能从命令行访问 sh ??? 您的答案显示为您希望能够在任意 Windows 命令提示符下键入 sh 并使其正常工作。 如果您选择“Install Bash”安装选项,Bash 和 sh 命令将随 Git4Windows 一起安装。 这不能直接在命令提示符下工作,但正如 Joel Ellis 所说,在 git bash 上工作【参考方案3】:

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

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

【讨论】:

很酷,但是如何使用bash 运行sh 文件?如果我尝试这样做,窗口就会闪烁并消失。如果我将文件拖放到打开的 bash 窗口中,它会说找不到路径(因为它使用不同的约定)。 现在可以在 Windows 上运行 .sh 文件吗?我现在不能尝试,但我有兴趣。 我自己没有尝试过,但是微软有一个关于如何在windows上运行sh的指南:docs.microsoft.com/en-us/windows/wsl/install-win10 @m93a 在 Ubuntu 终端窗口中,bash path/to/script 运行脚本。在 Ubuntu 中当然也有 sh。如果脚本具有适当的 shebang 和权限,只需 path/to/script 将使用 shebang 中指定的 rnterpreter 运行它。【参考方案4】:

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

sh test.sh

【讨论】:

它对我不起作用。命令提示符窗口打开,然后快速关闭。 如果您安装了 GIT,您可以在 PATH 系统变量中添加一个指向 sh.exe 的路径。就我而言,它是:c:\Program Files\Git\bin。然后从 PowerShell 运行 sh .\script.sh 这对我来说就像 2020 年 Windows 10 中的魅力一样!虽然复制/粘贴命令对我不起作用,因为它设置为固定在 ctrl-insshift-ins 如果您使用的是 VS Code,您可以使用 Git Bash 终端运行 .sh 文件。与上述答案相同,但留在 VS Code 中【参考方案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

【讨论】:

可以运行。但这是一个完全不同的环境。【参考方案6】:

你也可以使用cmder

Cmder 是一个软件包,纯粹是出于对 Windows 上没有漂亮的控制台仿真器的失望而创建的。它基于令人惊叹的软件,并加入了 Monokai 配色方案和自定义提示布局,从一开始就看起来很性感

cmder.net

【讨论】:

虽然它似乎带有一个可选的附加包,其中包括常见的 Unix shell 命令,但基本包似乎只是 cmd 的替代品。【参考方案7】:

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

基于this原创作品。

【讨论】:

【参考方案8】:

我按照指导在 Windows 10 中使用 Windows 10 Bash shell 又名 Linux 子系统又名 Ubuntu here

【讨论】:

【参考方案9】:

在 Windows 操作系统中安装 GitBash 工具。在 System 的环境变量中设置下面的Path 用于 Git 安装。

\Git\bin 中的程序文​​件

\Git\usr\bin 中的程序文​​件

cmd 窗口中键入“sh”以重定向到 Bourne shell 并在终端中运行您的命令。

【讨论】:

Git Bash 自带Git for Windows。【参考方案10】:

只需安装 git 并通过“bash ”运行您的 .sh 文件。

【讨论】:

【参考方案11】:

您是否尝试过 cding 到您的 .sh 所在的根目录以便从那里执行它,而不是像您在问题中显示的那样写下文件的路径?

像这样:

$ cd app/build
$ build.sh

【讨论】:

以上是关于如何在 Windows 命令提示符下运行 .sh?的主要内容,如果未能解决你的问题,请参考以下文章

如何在windows下写shell脚本

Windows下如何使用curl命令?

如何使批处理文件在 anaconda 提示符下运行

Windows XP上的Git sh.exe进程分叉问题,慢吗?

如何在 Windows 命令提示符下每 5 分钟安排一次任务?

如何在Windows下运行linux shell脚本