离开 git 控制台: 我如何执行一个批处理文件,然后返回到 git 控制台?

我有一个名为 clear.bat的小实用程序脚本,它可以对我的资源进行一些内部管理工作。

这是一个 .bat文件,所以我可以很容易地双击它的文件资源管理器。

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

要做到这一点,我打字

cmd
clear.bat
exit

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

编辑:
只是注意到柱子断了。

我想要的是在 Git bash 中执行 clean.bat,而不必键入上面的三个命令(cmdclear.batexit)。我只想在 Git bash 中执行 .bat文件。显而易见的方法是创建一个单独的 .sh文件,它执行相同的工作,但这将导致双重代码。


编辑2: 当我执行 cmd /C clean.bat时,Git bash 变成一个普通的 CMD 环境,并且只显示提示符。不执行文件 clean.bat。就好像我只要输入 cmd

此外,增加一个 /debug开关几乎没有任何作用。似乎只有 cmd得到评估和所有进一步的参数被忽略。

82968 次浏览

在多玩了一会儿之后,我自己找到了解决办法:

cmd "/C clean.bat"

但我不知道为什么..。

适用于 Windows 的 Git(msysGit 在 Windows1中已经被 Git 取代) 常见问题说你有三种选择:

  • 使用 winpty实用程序运行有问题的程序。这允许您继续使用更好的薄荷终端,但是如果您需要许多程序的变通方法,则可能会变得笨拙。

  • 修改 Git Bash 的快捷方式,让它在没有 mintty的情况下直接运行 bash,这样它就可以使用默认的控制台主机,并将其配置为“ Quick Edit”、合理的大小和回滚以及合适的 unicode 字体。您仍然不得不忍受控制台主机的其他怪癖。

  • 安装并使用 科尼姆

./clear.bat就行了。

我喜欢 start clean,它用 cmd 打开了一个新的窗口。这个方法有一些好处:

  • Exe 获得一个本机控制台
  • 新的控制台有一个原生的 windows 字符编码(例如 cp1251 vs utf8)

在某种程度上,Git for windows 增加了对环境变量的支持,所以除了@eckes 和@Alikelzin-kilaka 解决方案之外,你还可以

MSYS_NO_PATHCONV=1 cmd /c clean.bat

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

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

其他的解决方案

奇怪的引用解决方案

为什么 cmd "/c clean.bat"不创建其他错误?

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

请参阅 给你(存档)以获得比您想要的更多的解释。

例如,cmd解析参数与 wscript.exe不同

最后,您有希望找到一些与此方法一起工作的东西,它是三种解决方案中最“窗口式”的

//方法

这是相当好的解释 给你和简单的使用,但增加了额外的 /,这无助于可读性

这将工作,它也释放终端

  nohup ./nucleus.bat &
less nohup.out