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

问题描述 投票:0回答:7

我有一个名为

clear.bat
的小实用程序脚本,它对我的源代码进行一些整理工作。

这是一个

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

有时,我发现从 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
,而不必键入上面的三个命令(
cmd
clear.bat
exit
)。我只想从 Git bash 中执行
.bat
文件。明显的方法是创建一个单独的
.sh
文件来完成相同的工作,但这会导致双重代码。


编辑2: 当我执行

cmd /C clean.bat
时,Git bash 变成一个普通的 CMD 环境,只显示提示符。文件
clean.bat
不会被执行。就像我只输入
cmd
一样。

此外,添加

/debug
开关实际上没有任何作用。似乎只有
cmd
被评估,所有其他参数都被忽略。

windows git batch-file cmd
7个回答
114
投票

经过一番尝试后,我自己找到了解决方案:

cmd "/C clean.bat"

就可以了。但我不知道为什么...


55
投票

./clear.bat
就可以了。


9
投票

Git for Windows(msysGit 已被 Git for Windows1 取代)FAQ 表示您有 3 个选项:

  • 使用

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

  • 修改 Git Bash 的快捷方式以直接运行

    bash
    而无需
    mintty
    ,因此它使用默认控制台主机并将其配置为“快速编辑”、合理的大小和向后滚动以及合适的 unicode 字体。您仍然必须忍受控制台主机的其他怪癖。

  • 安装并使用ConEmu


7
投票

在某些时候,Windows 版 Git 添加了对

MSYS_NO_PATHCONV
环境变量的支持,因此除了 @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"
不会产生其他错误?

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

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

例如

cmd
解析参数的方式与
wscript.exe

不同

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

// 方法

这在here解释得很好,并且使用起来很简单,但是添加了一个额外的

/
,这对可读性没有帮助


4
投票

我喜欢

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

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

0
投票

这会起作用并且它也释放了终端

  nohup ./nucleus.bat &
  less nohup.out

0
投票

此方法(使用

//c
而不是
/c
)不需要引号。

cmd //c clean.bat
© www.soinside.com 2019 - 2024. All rights reserved.