【发布时间】:2019-09-14 11:27:34
【问题描述】:
我正在努力弄清楚如何通过 WSL 中的 bash 命令启动新的“命令提示符”窗口。目标是最好已经在 bash 中启动第二个提示。
我已经尝试过运行 cmd.exe 但这只会让我在 bash shell 中使用标准的 Windows 命令提示符 cmd。
https://i.imgur.com/tIdRMvR.png
运行 bash.exe 或 wsl.exe 命令只会将我从同一个 bash shell 中转到另一个 bash shell。
https://i.imgur.com/OM1XTlG.png
我正在使用 WSL 的 Debian 发行版,不过这并不重要。
我知道您可以通过将start 命令放在程序前面来从标准命令提示符创建一个新窗口。但是我找不到 *nix 等效项或如何从 WSL 中调用执行相同操作的 bash 命令。
【问题讨论】:
-
cmd.exe /c start bash,但这个问题不在此处讨论。 -
此外,清晰的概念会导致语言不那么扭曲。您正在新控制台中启动 bash。 “命令提示符”是一个奇怪的表达方式。有时人们用它来指代控制台,有时他们用它来指代 CMD shell。它们不是同一个东西,所以人们永远不清楚人们的意思,甚至他们是否明白他们不是同一个东西。
-
上述命令运行 CMD 只是为了使用其内置的
start命令,默认调用带有标志CREATE_NEW_CONSOLE的WINAPICreateProcessW。这会将 bash.exe 控制台句柄设置为一个标记值,告诉它在启动时分配一个新控制台,而不是继承父控制台。没有什么固有的需要使用 cmd.exe,甚至是控制台应用程序。例如,如果安装了 Windows Python,您可以使用pythonw.exe -c "import subprocess; subprocess.Popen('bash', creationflags=subprocess.CREATE_NEW_CONSOLE)"。它只是更冗长。 -
感谢第一个命令是我需要的。
-
cmd.exe /c start bash 将再次使用默认用户启动默认 wsl 分发,这可能不是您想要的。如果你没有 python 或者你不想被它所累,那么正确的方法是为相同的发行版和相同的用户启动另一个 wsl 实例,就像我在我的答案中显示的那样。
标签: windows bash ubuntu debian windows-subsystem-for-linux