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

问题描述 投票:0回答:11

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

app/build/build.sh

错误,

'app' is not recognized...

或者,

bash app/build/build.sh

错误,

'bash' is not recognized...

有什么想法我错过了什么吗?

这里是屏幕抓取, enter image description here

windows bash command-line sh
11个回答
307
投票

安装GIT。在安装 GIT 期间,通过选择其选项将 GIT Bash 添加到 Windows 上下文菜单。安装后,右键单击您的文件夹,选择

GIT Bash Here
(参见附图)并使用 sh 命令,例如:

sh test.sh


70
投票

错误信息表明您还没有安装

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
,但由于上述情况,它不太可能起作用。


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 

15
投票

您也可以使用cmder

Cmder 是一个软件包,纯粹出于对 Windows 上缺少良好的控制台模拟器的沮丧而创建的。它基于令人惊叹的软件,并采用 Monokai 配色方案和自定义提示布局,从一开始就看起来很性感

cmder.app


8
投票

在Windows操作系统中安装

GitBash
工具。在Git安装的系统环境变量中设置以下
Path

\Git

\Git\usr 中

cmd 窗口中键入“

sh
”以重定向到 Bourne shell 并在终端中运行命令。


7
投票

在 Windows 10 周年更新中,在 Windows 上的 ubuntu 上使用 bash 运行 shell 命令更加容易

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

ssh [email protected] < /mnt/c/ccode-eu.sh

7
投票

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


5
投票

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

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


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% %*'

基于this原创作品。


4
投票

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


2
投票

您是否尝试过

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

像这样:

$ cd app/build
$ build.sh
© www.soinside.com 2019 - 2024. All rights reserved.