例如,
- 我开始“git bash”;
- 我导航到某些目录;
- 我开始
git gui&
; - 我关闭控制台窗口或按 Ctrl+C。
Git-gui 的窗口消失了。即使我用过git gui&disown
. 即使当我按下 Ctrl+C 时它不在前台。
如何正确脱离git gui
Windows 控制台?
为了其他人的利益,我将给出与 git bash和msys bash相关的更一般的答案。
假设您要分离应用程序:
"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 用户)来说不是那么酷,请在上面的行中替换cmd
为 cmdow、NirCmd或类似的东西。
如果要将日志读取到 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
,第二个是你的守护进程的可见家。
一些文档与一些处理应用程序密切相关,通过类似于 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"
以下命令适用于“git bash”:
git gui </dev/null >/dev/null 2>&1 &
我试过Ctrl+ C,Ctrl+D并简单地关闭控制台窗口。git gui
在所有情况下都保持开放。
根据安东尼奥的回答,我想出了以下食谱:
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"
任何人都可以理解会发生什么和/或改进吗?
如果 gitgui 已经启动,您可以disown
使用该作业使其不会以控制台结束:
disown -h <jobid>
如果您想在启动 Git GUI 时执行此操作(因此您只需启动并忘记),nohup
但由于未知原因,它不在 MsysGit 分发的二进制文件中
在 Git for Windows 2.25 中,只需键入
git-gui
打开当前工作目录的 GUI,完全分离。(注意连字符)。