- 我启动“git bash”;
- 我导航到特定目录;
- 我启动
git gui&
; - 我关闭控制台窗口或按Ctrl+C。
git gui&disown
。 即使在按下Ctrl + C时它不在前景中。如何正确地从Windows控制台分离
git gui
?为了让其他人受益,我将提供一个更一般的答案,涉及到 git bash 和 msys bash。
假设您想要分离应用:
"C:\Program Files\MyApp\MyApp.exe"
如果没有任何你想要检索的信息输出到标准输出(stdout)或标准错误(stderr),则可以在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
窗口会一闪而过。如果这对您(的用户)不太酷,请在上面的行中用cmdow、NirCmd或类似工具替换cmd
。
如果要读取标准输出和标准错误日志,请使用:
cmd //c start cmd //k "C:\\Program Files\\MyApp\\MyApp" arg1 arg2
如果 MyApp 是一个控制台应用程序,这种方法是推荐的替代方法。现在你得到了一个 "home" 的守护进程,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 gui
的情况,请查看我的答案 https://dev59.com/-HDYa4cB1Zd3GeqPAGku#27002618 - Stéphane Gourichongit gui </dev/null >/dev/null 2>&1 &
我尝试了Ctrl+C、Ctrl+D和直接关闭控制台窗口,但git gui
在所有情况下都保持打开状态。
</dev/null
)、标准输出(>/dev/null
)和错误流(2>&1
)重定向到/dev/null
,有效地将它们与父进程分离。这似乎足以在父进程退出时让子进程继续运行。 - jeyk根据Antonio的答案,我已经找到了以下的方法:
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"
有人能理解发生了什么并/或改进吗?
disown
命令将作业脱离控制台,以防止其随着控制台的关闭而结束:disown -h <jobid>
如果您希望在启动Git GUI时执行此操作(因此您只需启动并忘记),则有nohup
,但由于某种未知原因,它不包含在MsysGit分发的二进制文件中。
即可。
git-gui
打开当前工作目录的GUI,完全独立。(注意连字符)。