8

例如,

  1. 我开始“git bash”;
  2. 我导航到某些目录;
  3. 我开始git gui&
  4. 我关闭控制台窗口或按 Ctrl+C。

Git-gui 的窗口消失了。即使我用过git gui&disown. 即使当我按下 Ctrl+C 时它不在前台。

如何正确脱离git guiWindows 控制台?

4

5 回答 5

4

为了其他人的利益,我将给出与 git bashmsys bash相关的更一般的答案。

解决方案 1:不使用标准输出分离

假设您要分离应用程序:

"C:\Program Files\MyApp\MyApp.exe"

它不会将您要检索的任何信息输出到标准输出(或标准错误)。
在您的 Windows bash shell 中使用:

cmd //c start //D "C:\\Program Files\\MyApp"  MyApp.exe arg1 arg2 

MyApp 将在一个单独的窗口中运行,关闭调用 bash shell 不会影响它(基本上就像 Linux 守护程序一样)。

如前所述,您无法阅读应用程序消息,除非它们是对话消息,因此此解决方案适用于 GUI 应用程序。无论如何,如果MyApp.exe它是一个 Windows 批处理文件,例如MyApp.cmd,它将调用它的 cmd.exe 主机并在那里记录:简而言之,您将读取 .cmd/.bat 案例的输出。

类似 Mac 的用户

cmd.exe窗口会瞬间闪出。如果这对您(r 用户)来说不是那么酷,请在上面的行中替换cmdcmdowNirCmd或类似的东西。

解决方案 2:使用标准输出分离

如果要将日志读取到 stdout 和 stderr,请使用:

cmd //c start cmd //k  "C:\\Program Files\\MyApp\\MyApp" arg1 arg2 

如果 MyApp 是控制台应用程序,则通常建议使用此替代方法。现在你得到一个带有“家”的守护进程。MyApp 将由第二个托管运行cmd.exe,您将在此处看到它的输出。
对于 GUI 应用程序,您最终会得到两个窗口:MyApp 窗口和调用 cmd 窗口。

在这两种情况下,退出 MyApp 并不意味着关闭 cmd 窗口;而关闭 cmd 窗口只会关闭 MyApp 控制台。

如果闪烁的一拳击中你,这里你只需要更换第一个cmd,第二个是你的守护进程的可见家。

解决方案 3:分离以文档为中心的应用程序

一些文档与一些处理应用程序密切相关,通过类似于 Linux shebang 语法的机制,但基于 Windows 的注册表;因此您无需调用相关应用程序即可打开文档。

这种行为可以在 bash 中进行模拟,甚至可以以分离的方式进行模拟。

至于不需要输出到 stdout 和 stderr 的应用程序,打开 MyApp.doc :

cmd //c start //D "C:\\Program Files\\MyApp"  MyApp.exe  "Path\\to\\MyApp.doc"

可以简化为:

cmd //c start //D "Path\\to" MyApp.doc

至于需要 stdout 和 stderr 输出的应用程序,

cmd //c start cmd //k  "C:\\Program Files\\MyApp\\MyApp" "Path\\to\\MyApp.doc"

可以简化为:

cmd //c start cmd //k  "Path\\to\\MyApp.doc"
于 2013-12-30T16:26:27.267 回答
3

以下命令适用于“git bash”:

git gui </dev/null >/dev/null 2>&1 &

我试过Ctrl+ CCtrl+D并简单地关闭控制台窗口。git gui在所有情况下都保持开放。

于 2015-09-30T13:27:16.457 回答
2

根据安东尼奥的回答,我想出了以下食谱:

cmd //c start //D "C:\Program Files\Git\bin" "wish.exe" "C:\Program Files\Git\libexec\git-core\git-gui"

它可以工作,可以通过在 shell 中按 Ctrl-D 来测试。shell 正确关闭, git gui 继续工作。

缺点:该方案忽略当前目录,在该C:\Program Files\Git\bin目录中打开 git gui,而不是在当前目录中。

有人可能会争辩说,Windows 上的 git gui 会记住最近的存储库,因此只需单击一下即可。没错,但问题是:如何git gui在当前目录中分离...

我已经尝试了一些变体来解决这个缺点,但没有一个真正令人满意的。

下面的人总是问git gui用什么打开。在文件选择器中选择“C:\Program Files\Git\bin\wish.exe”可以,但每次都必须这样做。

cmd //c start //D "E:\\escapedwindowsstyle\\path\\to\\my\\git\\repo\\" "C:\\Program Files\\Git\\bin\\wish.exe" "C:\\Program Files\\Git\\libexec\\git-core\\git-gui"

cmd //c start "C:\\Program Files\\Git\\bin\\wish.exe" "C:\\Program Files\\Git\\libexec\\git-core\\git-gui"

任何人都可以理解会发生什么和/或改进吗?

于 2014-11-18T19:41:35.007 回答
2

如果 gitgui 已经启动,您可以disown使用该作业使其不会以控制台结束:

disown -h <jobid>

如果您想在启动 Git GUI 时执行此操作(因此您只需启动并忘记),nohup但由于未知原因,它不在 MsysGit 分发的二进制文件中

于 2013-04-02T12:05:27.707 回答
1

在 Git for Windows 2.25 中,只需键入

git-gui

打开当前工作目录的 GUI,完全分离。(注意连字符)。

于 2020-02-11T01:18:51.287 回答