在Git bash中运行.sh脚本

Edv*_*vin 44 executable git-bash

我在使用带有MINGW64的git 2.7.2.windows.1的Windows机器上.

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

如何从我的git bash执行此脚本?

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

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

184*_*615 48

#!/usr/bin/env sh
Run Code Online (Sandbox Code Playgroud)

这就是git bash知道文件是可执行的.chmod a+x在gitbash什么都不做.

  • 补充一点,您必须将其添加为脚本的第一行,并且这个“#!”称为 shebang,它是由 shell 解释的内核约定。 (2认同)

int*_*ing 39

假设你有一个脚本script.sh.要运行它(使用Git Bash),请执行以下操作

chmod +x script.sh
./script.sh
Run Code Online (Sandbox Code Playgroud)

您可以更改chmod为所需的可执行权限.那些可以在这里找到.

注意:chmod唯一必须运行一次.运行./script.sh脚本时运行.

  • 这显然不是Windows的有效答案,因为chmod在这里默默无闻,(至少对我而言) (27认同)
  • 这个答案的重要部分是使用`./`,(即我不需要运行`chmod`命令).`./ ...`[在这里解释](http://stackoverflow.com/q/6331075/1175496) (10认同)
  • 我认为这不适用于Windows 10上的Git Bash,但只是自动完成功能不起作用.当我手动输入整个文件名(例如`./ my_really_complicated_long_script_name_that_I_wish_were_autocompletable.sh`)时,它可以工作.记得以`./`开头. (8认同)
  • 经过相当多的测试后,我的结论是 git-bash (对于 Windows)上的 [`chmod +x [script]` 没有任何作用**](/sf/answers/3141925461/ )。Git bash 正在寻找 sh-bang (#!/[interpreter]),这就是它用来评估可执行性的东西。因此,这里的答案实际上是错误的,除了需要`./`前缀的部分,这对于unix来说通常是正确的。 (2认同)

Joh*_*sby 31

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

sh my_awesome_script.sh
Run Code Online (Sandbox Code Playgroud)

  • 不确定 Windows,但在 shell 内部,脚本无法更改目录。好吧,当脚本运行时,显然,脚本内的每个“cd dir”都会更改工作目录。但是,当脚本完成后,您启动的外壳仍然位于相同的原始目录中。要更改目录,您需要使用点命令“.script.sh”来“获取”脚本,但通常编写别名更方便! (2认同)

小智 7

如果你在 Linux 或 ubuntu 上写./file_name.sh ,而你在 Windows 上,只需sh在文件名之前写上这样的内容sh file_name.sh

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


DIN*_*LIT 6

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

. script.sh 
Run Code Online (Sandbox Code Playgroud)

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

$ . setup.sh
$ echo $ALGORITHMS
[RS256]
Run Code Online (Sandbox Code Playgroud)

检查此问题的更多详细信息