Ответ 1
Вот более простое решение, требующее вспомогательного сценария WSH -based:
wscript .\runHidden.vbs bash -c "DISPLAY=:0 xmessage 'hello, world'"
Чтобы применить собственную методику запуска @davv в фоновом режиме, чтобы каждый раз избегать создания нового экземпляра bash
:
Единовременное действие (например, во время загрузки): запустить скрытое, остающееся открытым окно bash
. Это порождает 2 процесса bash
: процесс Windows bash.exe
который владеет окном консоли, и процесс bash
WSL (принадлежащий синглтону init
WSL), который затем доступен для обслуживания фоновых команд.
wscript .\runHidden.vbs bash # hidden helper instance for servicing background commands
Для каждой команды запуска X Window: Завершите каждую команду с помощью &
чтобы она выполнялась скрытым экземпляром WSL bash
асинхронно, без сохранения вызывающего экземпляра 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
Даже при запуске из приложения с графическим интерфейсом (например, через диалоговое окно " Run
", вызываемое с помощью Win+R), в этом окне консоли не отображается.
Если вы настроили свою систему на выполнение сценариев .vbs
с wscript.exe
по умолчанию (wscript//h:wscript/s
), вы можете напрямую вызывать runHidden.vbs
и, если вы поместите его в свой %PATH%
, по имени файла только (root): runHidden...
Обратите внимание, что использование сценария не ограничивается консольными приложениями: даже приложения с графическим интерфейсом могут быть скрытыми.