运行 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; .MSCPATHEXT=.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 -l
或exec bash --login
将替换当前 带有 Bash 登录 shell 的 shell。
还要注意:
您要么需要sh.exe
的完整路径,要么将其放在PATH
环境变量中(正如其他人已经指出的那样)。
如果确实需要在交互模式下强制shell调用,可以添加-i
选项
最后一个参数是必须执行的脚本的路径。此路径应为 Windows 格式。
【讨论】:
+1 完美。还有一条建议:将 *.sh 脚本保存为 UTF-8(noWindows 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 快捷方式的主要内容,如果未能解决你的问题,请参考以下文章
Git Bash - “没有这样的文件”运行具有来自 cmd.exe 的完全限定路径的 bash 脚本
Java源代码中带有vimdiff命令的Shell脚本在Git bash上运行时卡住了