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

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

【问题讨论】:

    标签: windows shell desktop msysgit git-bash


    【解决方案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,你应该:

    1. 按原样打开外壳
    2. 编辑或创建~/.profile(试试vi ~/.profile
    3. 添加此行:~/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 脚本
    • 脚本退出后窗口将保持打开状态

    执行以下操作:

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

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

    "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”——脚本运行时的当前目录。
    猜你喜欢
    • 2017-08-08
    • 1970-01-01
    • 2011-02-06
    • 1970-01-01
    • 2022-10-19
    • 2013-08-14
    • 1970-01-01
    • 2012-11-18
    • 2018-11-16
    相关资源
    最近更新 更多