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

qqrboqgw  于 2022-12-10  发布在  Git
关注(0)|答案(6)|浏览(137)

我有一个名为clear.bat的小实用程序脚本,它在我的源代码上做一些内务处理工作。
它是一个.bat文件,因此我可以在Windows资源管理器中轻松双击它。
有时候,我发现从Git bash(msysgit,如果这很重要的话)中执行它更方便。
为此,我键入

cmd
clear.bat
exit

cmd将我的Git bash转换为一个普通的cmd窗口,在那里我可以轻松地执行批处理。当我输入exit时,cmd环境被终止,我回到了我的Git bash。
有没有更简单的方法可以做到这一点?
我尝试了cmd /C clean.bat,因为the docs

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得到评估,所有进一步的参数都被忽略了。

mpgws1up

mpgws1up1#

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

cmd "/C clean.bat"

但我不知道为什么。

rpppsulh

rpppsulh2#

./clear.bat就可以了。

qfe3c7zg

qfe3c7zg3#

Git for Windows(msysGit已被Git for Windows 1所取代)常见问题解答指出您有3个选项:

  • 运行使用winpty工具有问题的程序。这允许你继续使用更好的Mintty终端,但如果你需要许多程序的变通方法,可能会变得笨拙。
  • 修改Git Bash的快捷方式,直接运行bash而不运行mintty,这样它就可以使用默认的控制台主机,并将其配置为“快速编辑”、合理的大小和回滚以及合适的unicode字体。
  • 安装并使用ConEmu
kd3sttzy

kd3sttzy4#

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

  • cmd.exe获取本机控制台
  • 新控制台具有本地Windows字符编码(例如cp1251 vs utf8)
xjreopfe

xjreopfe5#

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

MSYS_NO_PATHCONV=1 cmd /c clean.bat

一般来说,我更喜欢这种解决方案,因为它允许代码最接近于普通的bash,并且根据您的偏好情况,有许多方法可以导出MSYS_NO_PATHCONV
注意:Git for Window的bash不支持MSYS 2环境变量MSYS2_ARG_CONV_EXCL
其他解决方案
奇怪的引用解决方案
为什么cmd "/c clean.bat"不会产生其他错误?
事实证明,windows中的参数解析并不像 *nix中那样遵循同样的通用规则,而是根据runtime you compile against对参数进行不同的解析。基本上,在windows中,命令行参数作为“一个字符串”传入,然后由运行时解析。
请参阅herearchive),以获得比您想要的更多的解释。
例如,cmdwscript.exe解析参数的方式不同
最后,您有望找到与此方法配合使用的方法,并且它是三种解决方案中最“窗口式”的一种

/方法

这是很好的解释here和简单的使用,但增加了一个额外的/,这并不有助于可读性

vxf3dgd4

vxf3dgd46#

这将工作,它释放终端太

nohup ./nucleus.bat &
  less nohup.out

相关问题