如何在Windows上执行.sh文件?


67

当我尝试通过./name.sh命令在命令行中执行文件(name.sh)时,出现以下错误:

“。” 无法识别为内部或外部命令,可操作文件或批处理文件

请帮助我执行.sh文件

Answers:


74

您使用的是Windows CMD.EXE(错误消息)。它使用不同的语法来执行命令。sh name.sh假设您已安装Cygwin或类似软件,则需要使用。

需要说明的是,Windows没有内置的实用程序来支持.sh文件。要运行此类工具,您需要安装第三方工具,例如Cygwin


7
您还可以不只是在Windows上安装Git吗?似乎这样做可以增加对Shell脚本的支持,即使这些Shell脚本未执行与Git相关的任务。
DaveTheMinion 2014年

2
@DavidB是的,如果将C:\ Program Files(x86)\ Git \ bin(或计算机上的任何文件)放在PATH中,则可以使用,因为Git在其中放置了包括sh.exe在内的各种有用工具
Sumyrda

1
@DavidB是的,Git Bash知道如何处理,正确!
传奇'18

13

您正在尝试在Windows命令提示符处运行Linux命令。

在Linux上,正斜杠是路径分隔符。在Windows上,反斜杠是路径分隔符,正斜杠通常表示参数。

因此,Windows认为您正在尝试运行名为“”的命令。并解析参数“ /name.sh”。正确的约定为“。\ name.sh”。此外,Windows将自动在当前目录中搜索您的命令,因此您只需键入“ name.sh”即可。

您将面临的下一个问题是Windows不知道sh脚本是什么,这又是Linux的事情。如果确实需要或需要运行sh脚本,则可以通过安装Cygwin来解决此问题。

但是,根据以前的评论之一,您还可以将脚本重命名为name.bat并删除“#!/ bin / sh”行。现在,您有了Windows应该理解的批处理文件。您可以在此处阅读有关批处理文件的更多信息。


12

另外,您也可以转而安装Linux。在提示下:

sh runide.sh

要么

sudo sh runide.sh

您的程序将运行,并且您将拥有一个更好的系统。


15
这就像在说:“只要致富并付钱给你做这件事”
Funkodebat 2015年

7

我认为最好的解决方案是:

  • 下载并安装Windows版.git

  • 右键点击桌面,然后说“ git bash here”

  • 像在Unix中一样执行脚本

  • 做完了!

注意:许多命令在Windows上将不起作用!但是,许多基本内容仍然可以使用。

如果您定期需要该脚本,则可能要创建一个快捷方式(例如,在桌面上):

  • 创建一个快捷方式mintty.exe桌面上

  • 编辑快捷方式的属性并更改目标(保留路径):

  • C:\Program Files\Git\usr\bin\mintty.exe" -h always /bin/bash -l -e 'D:\folder\script.sh'


这行不通。当我运行@FOR / f“ tokens = *”%i IN('docker-machine env --shell cmd default')时,执行@%i。我得到了意外的令牌(
Steve Tomlin

5

您正在尝试用橙汁代替汽油来开车。Windows与Unix / Linux / zOS Unix子系统/ * ix Shell脚本共享存储在.bat或.cmd文件中的类似命令,因为这两个操作系统家族共享DEC PDP-x计算机的共同祖先。

如果您想立即获得满足,则需要安装提供“ sh.exe”程序或“ csh.exe”或“ bash.exe”程序的环境(任何人都可以使用tsh.exe?)

另外,如果您非常了解Unix脚本命令,并且非常了解Windows .cmd和.bat文件命令,则可以将.sh文件转换为.bat或.cmd文件。即使这样,您仍然会经常遇到更多Windows风格的Unix风格的程序-grep,sed,vi,emacs等。因此,安装CygWin的调用(非最低要求)只是为了获得Shell和Unix。工具。在这些特殊情况下,请将其放在闪存驱动器上。


3

有人说过有关/用于命令和\路径的MS-DOS的信息。这有点误导。看我的例子:

C:\myfoo\foo\>cd../.. 
C:\myfoo\foo\>cd..\..

效果没有差异。是的,并非所有操作都如此-实际的答案仅仅是“ 否”,或者没有Cygwin或SSHD则不能。

我只知道,因为我傻呆了半天试图找出什么if then fievalexec-Djava.something调用时。



1

我找到了另一个简单的解决方案,称为UnixUtil

下载并将其解压缩到C:驱动器。将环境变量设置path为include C:\UnixUtils\usr\local\wbin

这个很重要。不要设置路径C:\UnixUtils\bin



1

这是一个旧线程,但对于那些运行Windows 10的线程。只需从控制面板“打开或关闭Windows功能”中打开Windows功能即可。

选择功能“ Linux的Windows子系统”。安装后,您将拥有“ Bash”,甚至可以在bash中配置本机Linux服务器。当然,bash中的sh命令也可以使用。


0

问题可能实际上出在文件内name.sh-您正在尝试使用该.命令,但它正在尝试运行一种csh无效的shell(例如,我认为)。

因此:是否name.sh从正确的开始#!/bin/sh(如果您实际上是在尝试运行sh)?


1
是的,它确实会开始#!/ bin / sh cd D:\ Raghu D:winzip32.exe -min -a -r D:\ p那就是文件的内容

0

好的,这有很多问题-放下#!/ bin / sh并将扩展范围更改为bat,它可能还会有一些修复。然后,您也可以通过其文件名调用它。

Unix Shell脚本和Windows批处理文件的语法不太相似。cygwin或一堆弄乱unxutils的东西可能会使两者同时起作用,但是除非您绝对确定环境始终相同,否则不值得头疼


drop the #!/bin/sh, and change the extention to bat, and it might work with a few more fixes.什么?!我怀疑您从未尝试过此方法...在Windows上,甚至不支持最简单的bash功能或需要冗长的语法。
卡米洛·马丁

第二段涵盖了以下事实:如果没有大量的工作,它可能无法工作。
Journeyman Geek

好吧,你是对的。
卡米洛·马丁

0

如果您的家中(或工作中)有一个Linux盒子,并且插入了相同的网络,并且该网络是安全的,则可以这样做:

  1. 在Windows上共享文件夹(非常简单,但是请确保网络不受入侵者的侵害)。
  2. 使用mount //WinMachine/Share LinuxFolder(IIRC,并且需要Samba)将其安装在Linux中。
  3. 使用PuTTY之类的东西,远程登录到该Linux机器。
  4. 在安装的文件夹中运行命令。

0

从Windows运行Shell脚本。首先使用命令:dos2unix,然后可以使用常规命令:sh runide.sh

这将解决。


抱歉,需要进行一些更正。使用命令:“ dos2unix runide.sh”输出:dos2unix:将文件runide.sh转换为UNIX格式,然后使用命令:“ sh runide.sh”这肯定会运行您的Shell脚本。快乐学习
Sridhar GV 2015年

问题不是关于文件格式,而是关于Windows中缺少Shell的问题。
Archemar

0

尽管这里的现有的答案是正确的时候,Windows 10 没有现在可选包括的Ubuntu上运行一个完整的bash shell的修改版本

一旦成为可执行文件,便可以在bash中以常规方式运行脚本,例如:

chmod +x myscript.sh
./myscript.sh

如果要直接从Windows运行脚本,则可以在同一目录中创建快捷方式,并将“目标”设置为类似以下内容:

C:\Windows\System32\bash.exe -c "./myscript.sh"

如果脚本的路径相对于快捷方式的位置(如上面的示例),请确保“开始于”字段也为空白。

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.