运行 Git Bash 脚本的 Windows 快捷方式

Posted

技术标签:

【中文标题】运行 Git Bash 脚本的 Windows 快捷方式【英文标题】:Windows shortcut to run a Git Bash script 【发布时间】:2014-03-01 02:50:10 【问题描述】:

假设我有一个运行服务器的 test.sh 脚本并安装了 Git Bash,我如何创建一个 Windows 快捷方式,我可以双击它在前台的 Git Bash 中运行 tesh.sh 并允许我查看输出服务器的?

【问题讨论】:

【参考方案1】:

Git bash 已经是一个批处理文件,内容类似于:

C:\WINNT\system32\cmd.exe /c ""C:\Git\bin\sh.exe" --login -i"

如果您希望在 shell 上下文中运行(并保持运行)shell 脚本,请在命令行中指定它。诀窍在于,当解释脚本文件名时,它使用 Windows 路径,而不是 sh/Git 环境中的等效路径。

换句话说,要在 Git shell 中运行文件 D:\temp\test.sh 并让它继续运行,请创建这个批处理文件:

C:\WINNT\system32\cmd.exe /c ""C:\Git\bin\sh.exe" --login -i -- D:\temp\test.sh"

另一方面,如果你想运行一个脚本并取回你的 shell,你应该:

    按原样打开外壳 编辑或创建~/.profile(试试vi ~/.profile) 添加此行:~/test.sh(如果需要,请清除路径)

所以.profile 看起来像这样:

echo Executing .profile
/bin/sh ~/test.sh

test.sh 看起来像这样:

echo Hello, World!

你会得到这个提示:

Welcome to Git (version 1.7.11-preview20120710)


Run 'git help git' to display the help index.
Run 'git help <command>' to display help for specific commands.
Executing .profile
Hello, World!

ixe013@PARALINT01 ~
$

【讨论】:

太棒了,修改问题后,我意识到执行脚本后不需要它返回 Gish Bash shell 提示符。 有没有办法把开头的四行“Welcome to Git ...”去掉? 很多人会选择C:\Windows\System32\cmd.exe /c ""C:\Program Files\Git\bin\sh.exe" --login -i -- D:\temp\test.sh" 使用-i 同时还指定要执行的脚本几乎是没有意义的 - bash 实例将保持打开状态,并且对于脚本来说它看起来就像是在交互式外壳中运行,这充其量是无关紧要的,最坏的情况可能会导致不同的行为。您应该更清楚地表明,您的基于配置文件的解决方案将为 所有 未来的登录 shell 调用脚本,这可能是不受欢迎的。 抛开其他问题,不需要中间批处理文件;一个快捷方式文件,按照OP的要求,可以直接使用这个命令(cmd.exe不需要参与):"C:\Program Files\Git\bin\sh.exe" -l D:\temp\test.sh【参考方案2】:

我建议使用环境变量%ComSpec%,而不是cmd 的绝对路径:

%ComSpec% /c ""C:\Program Files (x86)\Git\bin\sh.exe" --login -i"

甚至只是cmd 命令,通常可从 %PATH% 获得:

cmd /c ""C:\Program Files (x86)\Git\bin\sh.exe" --login -i"

如果您的 C:\Program Files (x86)\Git\bin 添加到 PATH(这也是常见的解决方案,也是 TortoiseGit 安装的一种情况),您可以使用:

cmd /c "sh --login -i"

【讨论】:

我必须使用 cmd.exe(带有 .exe 扩展名),否则无法运行。 检查你的 PATHEXT 环境变量,它应该是这样的 .COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH; .MSC PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC;.PY;.PYW 如果你按照OP的要求创建快捷方式文件cmd.exe根本不需要参与。【参考方案3】:

其他答案有效,但有一个更简短的解决方案,可以完全回答 问题,即:

如何创建可以双击运行的 Windows 快捷方式 tesh.sh 在 Git Bash 中

答案是:将以下命令添加到快捷方式的Target: 字段中:

"C:\Git\bin\sh.exe" -l "D:\test.sh"

其中,-l--login 的缩写。

为了更好地理解此命令的作用,请参阅有关Invoking Bash 的官方 GNU 文档:

-l (--login):让这个 shell 表现得好像它是被登录直接调用的。当 shell 是交互式的时,这是等价的 使用exec -l bash 启动登录shell。当外壳是 不是交互式的,登录 shell 启动文件将被执行。 exec bash -lexec bash --login 将替换当前 带有 Bash 登录 shell 的 shell。

还要注意:

您要么需要sh.exe 的完整路径,要么将其放在PATH 环境变量中(正如其他人已经指出的那样)。 如果确实需要在交互模式下强制shell调用,可以添加-i选项 最后一个参数是必须执行的脚本的路径。此路径应为 Windows 格式。

【讨论】:

+1 完美。还有一条建议:将 *.sh 脚本保存为 UTF-8(no Windows 1252 就像记事本一样,no UTF8-BOM 就像 Visual Studio 那样!)跨度> 请注意,这将在脚本终止时自动关闭窗口,因此您的答案不满足“允许我查看服务器的输出”的要求。此外,通过在默认为 Windows OEM 代码页的常规控制台窗口中运行脚本,您可能会遇到字符编码问题。【参考方案4】:

我认为的最佳解决方案:

调用正确的 shell 没有不必要的窗口 之后调用 bash 脚本 脚本退出后窗口将保持打开状态

执行以下操作:

    创建快捷方式到您桌面上的mintty.exe,例如。它位于%installation dir%/Git/usr/bin/mintty.exe

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

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


参数说明:

-h always 在脚本完成时保持窗口打开,因此在您仍在阅读输出时窗口不会消失(如果您不需要阅读输出并希望窗口自动关闭,请删除)。

-l 使这个 shell 表现得好像它是被登录直接调用的一样。

如果管道返回非零状态 (more info),-e 将立即退出。

【讨论】:

不错。如果需要,记得设置“Start in”——脚本运行时的当前目录。

以上是关于运行 Git Bash 脚本的 Windows 快捷方式的主要内容,如果未能解决你的问题,请参考以下文章

windows怎么提取bash脚本

Git Bash - “没有这样的文件”运行具有来自 cmd.exe 的完全限定路径的 bash 脚本

Java源代码中带有vimdiff命令的Shell脚本在Git bash上运行时卡住了

错误 - 在Windows 7中使用“Git Bash Here”时,“文件扩展名.vbs没有脚本引擎”

windows怎么运行shell脚本

如何检测 Python 是不是在 Git Bash 终端或 Windows cmd 中运行?