【发布时间】:2014-03-01 02:50:10
【问题描述】:
假设我有一个运行服务器的 test.sh 脚本并安装了 Git Bash,我如何创建一个 Windows 快捷方式,我可以双击它在前台的 Git Bash 中运行 tesh.sh 并允许我查看输出服务器的?
【问题讨论】:
标签: windows shell desktop msysgit git-bash
假设我有一个运行服务器的 test.sh 脚本并安装了 Git Bash,我如何创建一个 Windows 快捷方式,我可以双击它在前台的 Git Bash 中运行 tesh.sh 并允许我查看输出服务器的?
【问题讨论】:
标签: windows shell desktop msysgit git-bash
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 ~
$
【讨论】:
C:\Windows\System32\cmd.exe /c ""C:\Program Files\Git\bin\sh.exe" --login -i -- D:\temp\test.sh"
-i 同时还指定要执行的脚本几乎是没有意义的 - bash 实例将不保持打开状态,并且对于脚本来说它看起来就像是在交互式外壳中运行,这充其量是无关紧要的,最坏的情况可能会导致不同的行为。您应该更清楚地表明,您的基于配置文件的解决方案将为 所有 未来的登录 shell 调用脚本,这可能是不受欢迎的。
cmd.exe不需要参与):"C:\Program Files\Git\bin\sh.exe" -l D:\temp\test.sh
我建议使用环境变量%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"
【讨论】:
PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC;.PY;.PYW
cmd.exe根本不需要参与。
其他答案有效,但有一个更简短的解决方案,可以完全回答 问题,即:
如何创建可以双击运行的 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 环境变量中(正如其他人已经指出的那样)。-i选项【讨论】:
Windows 1252 就像记事本一样,no UTF8-BOM 就像 Visual Studio 那样!)跨度>
我认为的最佳解决方案:
执行以下操作:
创建快捷方式到您桌面上的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 将立即退出。
【讨论】: