我在cmd中运行WSL bash。我不会将它用于任何事情,它只是挂在那里以保持WSL系统的活着。
当我启动X应用程序时:
bash -c "DISPLAY=:0 xmessage hello &"
我得到了这个结果:
我可以毫无问题地关闭命令窗口,但这很烦人。
如何在不每次都获取此cmd窗口的情况下运行命令?
答案 0 :(得分:15)
这是一个更简单的解决方案,需要 WSH的帮助程序脚本,但是:
wscript .\runHidden.vbs bash -c "DISPLAY=:0 xmessage 'hello, world'"
要应用@davv自己的启动后启动技术,以避免每次都创建一个新的bash
实例:
一次性操作(例如,在启动时):启动隐藏的,保持打开的bash
窗口。这会生成 2 bash
进程:拥有控制台窗口的 Windows bash.exe
进程和WSL bash
进程(由WSL init
单例),然后可用于服务后台命令。
wscript .\runHidden.vbs bash # hidden helper instance for servicing background commands
对于每个X Window启动命令 :使用&
终止每个命令,使其由隐藏的WSL bash
实例运行< em>异步,而不保持调用 bash
实例的活动:
wscript .\runHidden.vbs bash -c "DISPLAY=:0 xmessage 'hello, world' &"
runHidden.vbs
源代码:' Simple command-line help.
select case WScript.Arguments(0)
case "-?", "/?", "-h", "--help"
WScript.echo "Usage: runHidden executable [...]" & vbNewLine & vbNewLine & "Runs the specified command hidden (without a visible window)."
WScript.Quit(0)
end select
' Separate the arguments into the executable name
' and a single string containing all arguments.
exe = WScript.Arguments(0)
sep = ""
for i = 1 to WScript.Arguments.Count -1
' Enclose arguments in "..." to preserve their original partitioning.
args = args & sep & """" & WScript.Arguments(i) & """"
sep = " "
next
' Execute the command with its window *hidden* (0)
WScript.CreateObject("Shell.Application").ShellExecute exe, args, "", "open", 0
即使从GUI应用程序启动(例如通过使用 Win + R 调用的Run
对话框),也不会显示控制台窗口。
如果您已将系统配置为默认.vbs
执行wscript.exe
脚本,则可以直接调用wscript //h:wscript /s
,如果您将其置于runHidden.vbs
您的%PATH%
,仅限文件名(root):runHidden ...
。
请注意,脚本的使用不仅限于 console 应用程序:甚至可以使用隐藏的GUI应用程序运行。
答案 1 :(得分:2)
还有另一个简单的解决方案,它需要一个外部可执行文件。它没有依赖关系,并由aseering on GitHub推荐。
你可以通过run.exe启动bash:run.exe bash.exe -c&#34;&lt;无论Linux命令&gt;&#34;。 (此处提供了run.exe:http://www.straightrunning.com/projectrun/)
在搜索路径上使用run
,您只需拨打
run bash -c "DISPLAY=:0 xmessage hello"
答案 2 :(得分:1)
所以我现在就做了这个解决方法。我真的希望有一个比这更好的方法,但在这里:
在纯粹为了保持WSL活着的命令提示符中,我运行了这个脚本:
<强> wsl_run_server 强>
#!/bin/bash
set -e
nc -kl 127.0.0.1 15150 | sh
然后我有这个命令在后台执行命令:
<强> wsl_run_background_command 强>
if ! pidof -x bin/wsl_run_server; then
echo wsl_run_server isnt running!
exit 1
fi
echo \($@\) \& | nc localhost 15150
从Windows获取然后致电:
bash -c "DISPLAY=:0 ~/bin/wsl_run_command xmessage hello"
答案 3 :(得分:0)
screen -dmS [name] [command]
screen -dmS gui bash -c "DISPLAY=:0 xmessage hello"
wslusc screen -dmS gui bash -c "DISPLAY=:0 xmessage hello"