在Git Bash中运行.sh脚本

118

我正在使用安装了MinGW 64的Git 2.7.2.windows.1的Windows机器。

我有一个脚本在C:/path/to/scripts/myScript.sh

如何从我的Git Bash实例中执行这个脚本?

可以将其添加到.bashrc文件中,然后执行整个bashrc文件。

但是我想将脚本添加到一个单独的文件中并从那里执行它。


可能是重复的问题,参考 *Windows下运行Git Bash脚本的快捷方式*。 - Peter Mortensen
10个回答

115

假设您有一个脚本script.sh。如果要运行它(使用Git Bash),请按照以下步骤操作:[a]在第一行添加“sh-bang”行(例如#!/bin/bash),然后 [b]

# Use ./ (or any valid dir spec):
./script.sh
注意:chmod +x 在 Git Bash 中对脚本的可执行性没有任何作用。运行它既不会有任何损害,也不会实现任何目标。

注意:chmod +x 在 Git Bash 中对脚本的可执行性没有任何作用。运行它既不会有任何损害,也不会实现任何目标。


41
对于Windows来说,那显然不是一个有效的答案,因为在这里chmod命令实际上是默默地不起任何作用的(至少对我而言)。 - noonex
1
@noonex chmod 命令可以让你的程序变得可执行。 - intboolstring
intboolstring on windows ? - noonex
12
这个答案的重要部分是使用了 ./ (也就是说我不需要运行 chmod 命令)。./... 的含义可以在这里找到解释:https://dev59.com/aWw15IYBdhLWcg3w4_7k. - Nate Anderson
10
我原以为在Windows 10上的Git Bash无法工作,但实际是自动补全功能没有启用。当我手动输入整个文件名时(例如./my_really_complicated_long_script_name_that_I_wish_were_autocompletable.sh),它可以正常运行。记得要以./开头。 - Ryan
5
经过多次测试,我的结论是,在 Git Bash(用于Windows的终端模拟器)上执行chmod +x [script]根本不起作用。Git Bash需要寻找sh-bang(#!/[interpreter]),并以此来判断文件是否可执行。因此,除了需要在Unix系统下使用./前缀之外,这个回答实际上是错的。 - Stabledog

71
#!/usr/bin/env sh

这就是git bash如何知道一个文件是否可执行。在gitbash中,chmod a+x没有任何作用。 (注意:任何"she-bang"都可以使用,例如#!/bin/bash等)


1
这在Windows上的git-bash上有效,chmod +x似乎执行无操作。 - Andrew
这样做可以实现自动完成,这正是我遇到的问题。 - OozeMeister
2
请在脚本的第一行添加以下内容:#!,这被称为 shebang,是由 shell 解释的内核约定。 - jaques-sam
这应该是被接受的答案。另一个实际上并不起作用。 - Stuporman
在Windows Git Bash中,你只需要使用"./",所以其他答案确实是正确的。根据我的有限经验,在Windows上安装Git Bash时,这是唯一有效的方法。 - Maxx

58

如果你希望在Windows的git bash提示符下执行一个脚本文件,只需在脚本文件前加上sh。

sh my_awesome_script.sh

我尝试了这里的每个建议,但都没有起作用。我只是想创建一个更改目录的脚本。无论我尝试什么,它都不起作用。尝试将其制作为.bat文件,它显示命令,但不更改目录。尝试使用sh执行它,它什么也不做。从来没有出现过错误,它只是不起作用。 - Tim Eckel
2
不确定在Windows中是否适用,但在shell内部,脚本无法更改目录。当脚本运行时,脚本内的每个"cd dir"都会更改工作目录,显然如此。但是当脚本完成后,从您启动的外壳仍然处于相同的原始目录。要更改目录,您需要使用点命令“source”脚本:". script.sh",但通常编写别名更方便! - Angel O'Sphere
1
我使用macOS并与Windows用户共享代码。 sh my_awesome_script.sh 对我们两个人都很好用,可以作为 pre-push 钩子(使用husky)。 谢谢! - naorz

7

如果您在Linux或Ubuntu上,请写./file_name.sh,而如果您在Windows上,则在文件名前面加上sh,像这样:sh file_name.sh

  1. 对于Linux -> ./filename.sh
  2. 对于Windows -> sh file_name.sh

6
如果你在你的bash脚本中运行一个export命令,上述给出的解决方案可能不会导出任何内容,即使它会运行脚本。作为替代,你可以使用以下方法来运行你的脚本。
. script.sh 

现在,如果您尝试回显您的变量,它将被显示出来。在git bash上检查结果。
$ . setup.sh
$ echo $ALGORITHMS
[RS256]

在此问题中查看更多详细信息


4

进入目录后,只需运行以下命令:./myScript.sh


3

我曾经遇到了类似的问题,但是我遇到了一个错误信息:

无法执行二进制文件

我发现文件名包含非ASCII字符。当这些字符被修复之后,脚本可以通过./script.sh正常运行。


2

如果你像我一样将.sh文件的默认打开方式更改为文本编辑器,那么只需运行"bash .\yourscript.sh"即可(前提是你已经安装了git bash并将其添加到环境变量中)。


1
我有两个.sh脚本来启动和停止数字海洋服务器,我想在Windows 10上运行它们。我所做的是:
  • 下载了"Git for Windows"(从https://git-scm.com/download/win)。
  • 安装了Git。
  • 要执行.sh脚本,只需双击脚本文件,它就会开始执行脚本。
现在每次运行脚本,我只需双击脚本即可。

1

在文件顶部加上#!/bin/bash会自动使.sh文件可执行。 我同意chmod命令并没有起到任何作用,但是上述行解决了这个问题。 你可以在gitbash中给出完整的路径来执行它,或者将其添加到PATH变量中 export PATH=$PATH:/path/to/the/script 然后你就可以从任何地方运行它了


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