从git控制台出来:如何执行批处理文件然后返回到git控制台?

eck*_*kes 65 windows git cmd batch-file

我有一个小的实用程序脚本clear.bat,它在我的源上做一些内务处理工作.

它是一个.bat文件,因此我可以在Windows资源管理器中轻松双击它.

有时,我发现从我的Git bash执行它更方便(msysgit,如果这很重要).

为此,我打字

cmd
clear.bat
exit
Run Code Online (Sandbox Code Playgroud)

cmd把我的Git bash变成一个普通的cmd窗口,我可以轻松地执行我的批处理.当我输入时exit,cmd环境终止,我回到我的Git bash中.

这可以通过更简单的方式实现吗?

cmd /C clean.bat自从文档说出来以后我就试过

Syntax
      CMD [charset] [options]

      CMD [charset] [options] [/c Command] 

      CMD [charset] [options] [/k Command] 

Options   
   /C     Run Command and then terminate

   /K     Run Command and then return to the CMD prompt.
          This is useful for testing, to examine variables
Run Code Online (Sandbox Code Playgroud)

编辑:
刚注意到帖子坏了.

我想是执行clean.bat从GIT中的bash内,而无需键入三个命令上述(cmd,clear.bat,exit).我只想.bat从我的Git bash中执行该文件.显而易见的方法是创建一个单独的.sh文件来执行相同的工作,但这将导致双重代码.


编辑2: 当我执行时cmd /C clean.bat,Git bash变成一个普通的CMD环境,只显示提示.该文件clean.bat未执行.就像我输入一样cmd.

此外,添加一个/debug开关确实没什么.似乎只会cmd被评估,所有其他参数都会被忽略.

eck*_*kes 76

在玩了一下之后,我自己找到了解决方案:

cmd "/C clean.bat"
Run Code Online (Sandbox Code Playgroud)

诀窍.但我不知道为什么......

  • 是的,我也想为您发布此信息 - 原因可能就在这里(这是一个已知问题):http://code.google.com/p/msysgit/issues/detail?id = 426 (4认同)
  • 我写了一个名为"bat"的git bash脚本,现在你可以在命令行上执行bat mybat.bat并执行#!/ bin/bash cmd"/ C $ 1" (4认同)
  • 以下解决了论证问题.剧透:`// c`.http://stackoverflow.com/a/21907301/435605 (4认同)
  • 有没有办法发送参数? (2认同)

hal*_*ato 41

./clear.bat 会做的.

  • 这似乎有效,但是 Git bash 如何知道这是一个批处理文件? (2认同)

And*_*ndy 7

在某些时候,Git for windows 添加了对MSYS_NO_PATHCONV环境变量的支持,因此除了 @eckes 和 @AlikElzin-kilaka 解决方案之外,您还可以

MSYS_NO_PATHCONV=1 cmd /c clean.bat
Run Code Online (Sandbox Code Playgroud)

总的来说,我更喜欢这种解决方案,因为它允许代码最接近普通的 bash,并且MSYS_NO_PATHCONV根据您的首选情况有多种导出方法。

注意:Git for Window 的 bash 不支持 MSYS2 环境变量MSYS2_ARG_CONV_EXCL

其他解决方案

奇怪的引用解决方案

为什么不会cmd "/c clean.bat"产生其他错误?

事实证明,Windows 中的参数解析并不遵循与 *nix 中相同的通用规则。相反,在 Windows 中,根据您编译的运行时,参数的解析方式有所不同。基本上在 Windows 中,命令行参数作为“一个字符串”传入,然后由运行时解析。

请参阅此处存档)以获取比您想要的更多解释。

例如cmd以不同的方式解析参数wscript.exe

最后,您有望找到适合此方法的方法,并且它是三种解决方案中最“窗口式”的

方法

这在这里解释得很好并且易于使用,但添加了一个额外的内容/,这对可读性没有帮助


Yit*_*etz 6

适用于WindowsGit(msysGit已被Git for Windows 1取代)常见问题解答说您有3个选项:

  • 运行使用该winpty实用程序时遇到问题的程序.这允许您继续使用更好的mintty终端,但如果您需要许多程序的解决方法,可能会变得笨拙.

  • 修改Git Bash的快捷方式bash直接运行,mintty因此它使用默认控制台主机并将其配置为"Quick Edit",合理的大小和向后滚动以及合适的unicode字体.你仍然需要与控制台主机的其他怪癖一起生活.

  • 安装并使用ConEmu.

  • 不,我没有.但是,由于bash的这种行为是众所周知的,因此winpty除了做它的原始工作之外 - 并解决这个问题也就不足为奇了.但正确的解决方案是使用`cmd // c`(http://stackoverflow.com/questions/21357813/weirdness-when-running-cmd-exe-c-under-git-bash)而不是安装其他软件! (2认同)
  • `winpty` 与 git bash 一起开箱即用。在排除之前我会尝试一下。 (2认同)