在 Git Bash 中运行 .sh 脚本

Posted

技术标签:

【中文标题】在 Git Bash 中运行 .sh 脚本【英文标题】:Running .sh scripts in Git Bash 【发布时间】:2016-07-23 21:44:18 【问题描述】:

我在使用带有 MinGW 64 的 Git 2.7.2.windows.1 的 Windows 机器上。

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

如何从我的 Git Bash 实例执行此脚本?

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

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

【问题讨论】:

Windows shortcut to run a Git Bash script 的可能重复项 【参考方案1】:

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

# Use ./ (or any valid dir spec):
./script.sh

注意:chmod +x 对脚本在 Git Bash 上的可执行性没有任何作用。运行它不会有什么坏处,但它也不会完成任何事情。

【讨论】:

这显然不是 Windows 的有效答案,因为 chmod 在这里真的什么都不做,(至少对我来说) @noonex chmod 使您的程序可执行。 这个答案的重要部分是使用./,(即我不需要运行chmod 命令)。 ./...is explained here 我认为这不适用于 Windows 10 上的 Git Bash,但只是自动完成功能不起作用。当我手动输入整个文件名(例如./my_really_complicated_long_script_name_that_I_wish_were_autocompletable.sh)时,它起作用了。记得以./开头。 对此进行了相当多的测试,我的结论是chmod +x [script] on git-bash (for Windows) does nothing whatsoever。 Git bash 正在寻找 sh-bang (#!/[interpreter]),这就是它用来评估可执行性的方法。因此,这里的答案实际上是错误的,除了需要 ./ 前缀的部分,这对于一般的 unix 来说是正确的。【参考方案2】:
#!/usr/bin/env sh

这就是 git bash 如何知道文件是可执行的。 chmod a+x 在 gitbash 中什么都不做。 (注意:任何“she-bang”都可以,例如#!/bin/bash等)

【讨论】:

这适用于 Windows 上的 git-bash,chmod +x 似乎执行无操作 这样做可以自动完成,这是我遇到的问题。 补充一下,你必须把它添加到脚本的第一行,并且这个#!被称为shebang,它是由shell解释的内核约定。 这应该是公认的答案。另一个实际上不起作用。【参考方案3】:

如果您希望在 Windows 上从 git bash 提示符执行脚本文件,只需在脚本文件前加上 sh

sh my_awesome_script.sh

【讨论】:

0 反对票 我在这里尝试了所有建议,但没有一个有效。我只是想创建一个更改为目录的脚本。无论我尝试什么都行不通。试图使它成为一个 .bat 文件,它显示命令,但不更改目录。尝试用 sh 执行它,它什么也没做。从来没有任何错误,它只是不起作用。 不确定windows,但是在shell里面,脚本不能改变目录。好吧,当脚本运行时,每个“cd dir”脚本内部 显然都会更改工作目录。但是当脚本完成后,你从那里开始的外壳仍然在同一个原始目录中。要更改目录,您需要使用 dot 命令“获取”脚本:“.script.sh”,但通常编写别名更方便!【参考方案4】:

如果你在 Linux 或 ubuntu 上写 ./file_name.sh 而你在 Windows 上只需在文件名之前写 sh sh file_name.sh

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

【讨论】:

【参考方案5】:

我遇到了类似的问题,但我收到了一条错误消息

无法执行二进制文件

我发现文件名包含非 ASCII 字符。修复这些问题后,脚本在 ./script.sh 上运行良好。

【讨论】:

【参考方案6】:

如果您在 bash 脚本 中运行 export 命令,则上述解决方案可能不会导出任何内容,即使它会运行该脚本。作为替代方案,您可以使用

运行脚本
. script.sh 

现在,如果您尝试回显您的 var,它将显示出来。在我的 git bash 上检查我的结果

(coffeeapp) user (master *) capstone
$ . setup.sh
 done
(coffeeapp) user (master *) capstone
$ echo $ALGORITHMS
[RS256]
(coffeeapp) user (master *) capstone
$

在question中查看更多详细信息

【讨论】:

【参考方案7】:

如果您像我一样将 .sh 文件的默认打开方式更改为文本编辑器,只要您安装了 git bash 并在路径中,您只需“bash .\yourscript.sh”即可。

【讨论】:

【参考方案8】:

进入目录后,以./myScript.sh 运行它

【讨论】:

【参考方案9】:

我有两个 .sh 脚本来启动和停止我想从 Windows 10 运行的数字海洋服务器。我所做的是:

下载了“Windows 版 Git”(来自 https://git-scm.com/download/win)。 已安装 Git 要执行 .sh 脚本,只需双击它开始执行脚本的脚本文件。

现在每次我只要双击脚本就运行脚本

【讨论】:

以上是关于在 Git Bash 中运行 .sh 脚本的主要内容,如果未能解决你的问题,请参考以下文章

如何使用带有自定义 bashrc 的 Git bash 运行脚本?

windows怎么运行shell脚本

更新正在运行的 bash 文件

如何在路径有空格的另一个 bash 脚本中运行 bash 脚本?

Git Bash 中的 Azure CLI

如何在不使用“sh”或“bash”命令的情况下运行 shell 脚本?