WSL 从 Windows 运行 Linux,无需生成 cmd 窗口

2024-02-17

我在 cmd 中运行 WSL bash。我没有将它用于任何用途,它只是挂在那里以保持 WSL 系统的活动。

当我启动 X 应用程序时:

bash -c "DISPLAY=:0 xmessage hello &"

我得到这个结果:

我可以毫无问题地关闭命令窗口,但这很烦人。

如何运行命令而不每次都得到这个cmd窗口?


这是一个更简单的解决方案,然而,这需要一个WSH https://en.wikipedia.org/wiki/Windows_Script_Host基于辅助脚本, runHidden.vbs(见底部):

wscript .\runHidden.vbs bash -c "DISPLAY=:0 xmessage 'hello, world'"

应用 @davv 自己的后台启动技术来避免创建新的bash每次实例:

One-time action(例如,在启动时):启动隐藏的、保持打开的bash窗户。这会产生2 bash过程:Windows bash.exe拥有控制台窗口的进程和 WSLbash进程(由 WSL 拥有)init单例),然后可用于服务后台命令.

wscript .\runHidden.vbs bash # hidden helper instance for servicing background commands

对于每个 X Window 启动命令:终止每个命令&让其由隐藏的 WSL 运行bash实例异步地,不保留invoking 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, if necessary.
  if Instr(WScript.Arguments(i), " ") > 0 then
    args = args & sep & """" & WScript.Arguments(i) & """"
  else
    args = args & sep & WScript.Arguments(i)
  end if
  sep = " "
next

' Execute the command with its window *hidden* (0)
WScript.CreateObject("Shell.Application").ShellExecute exe, args, "", "open", 0

Even when launched from a GUI app (such as via the Run dialog invoked with Win+R), this will not show a console window.

如果您的系统配置为执行.vbs脚本与wscript.exe默认情况下 (wscript //h:wscript /s,我认为这是默认配置),你可以调用runHidden.vbs直接,如果你把它放在你的%PATH%,仅按文件名(根):runHidden ....

请注意,脚本的使用不限于console应用程序:甚至 GUI 应用程序也可以用它隐藏运行。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

WSL 从 Windows 运行 Linux,无需生成 cmd 窗口 的相关文章

  • Bash while 循环等待任务完成

    我创建了一个 bash 脚本来处理文件夹及其子文件夹中的视频 find type f name mkv while read file do ffmpeg i file done 问题 它不是 while 循环等待 ffmpeg 完成 而是
  • 通过插件管理器在 Notepad++ 中配置代理设置

    我想在 Notepad 中配置代理设置 以允许通过代理从互联网下载 在从网上搜索如何执行此操作后 我了解到我需要通过 设置 按钮在插件管理器中执行此操作 当我转到插件 gt 插件管理器 gt 显示插件管理器 gt 设置时 我看到下面的对话框
  • 如何阻止ubuntu在使用apt安装或更新软件包时弹出“Daemons using outdatedlibraries”? [关闭]

    Closed 这个问题是与编程或软件开发无关 help closed questions 目前不接受答案 我最近新安装了 Ubuntu 22 04 LTS 我发现每次使用 apt 安装或更新软件包时 它都会询问我有关Which servic
  • 在 Win7 登录屏幕上运行应用程序[重复]

    这个问题在这里已经有答案了 我想通过服务在 Windows 7 的登录屏幕上运行应用程序 我对此进行了长期研究并尝试了不同的方法 但不幸的是到目前为止还没有完全成功 我设法在当前登录用户的锁定屏幕上运行该应用程序 起初我认为这就是我基本上试
  • Ubuntu 上的 MongoDB 不会作为服务启动,日志中没有任何内容

    我正在 Ubuntu 上运行 MongoDB 2 2 如果我运行 sudo mongod 我得到一个错误 它找不到 data db 这不是数据库所在的位置 在 mongod conf 中 数据库路径被指定为 Ubuntu 10gen 默认值
  • 并行运行 shell 脚本

    我有一个 shell 脚本 打乱大型文本文件 600 万行和 6 列 根据第一列对文件进行排序 输出 1000 个文件 所以伪代码看起来像这样 file1 sh bin bash for i in seq 1 1000 do Generat
  • 使用 shell 脚本将行附加到 /etc/hosts 文件

    我有一个新的 Ubuntu 12 04 VPS 我正在尝试编写一个安装脚本来完成整个 LAMP 安装 我遇到问题的地方是在 etc hosts文件 我当前的主机文件如下所示 127 0 0 1 localhost Venus The fol
  • Sencha Cmd 5 + Java 8 错误

    在我的 Windows 构建服务器上安装 Java 8 JDK 后 执行以下命令时遇到以下错误sencha命令 C gt sencha Error Registry key Software JavaSoft Java Runtime En
  • ntdll!kifastsystemcallret

    我的程序在执行结束时崩溃 甚至看不到堆栈展开信息 我只能看到这个 ntdll kifastsystemcallret 有人能提供一些线索吗 KiFastSystemCallRet 意味着线程处于系统调用中 x86 NT 系统调用调度的一个不
  • 生成尽可能最快的可执行文件

    我有一个非常大的程序 我一直在 Visual Studio 下编译 v6 然后迁移到 2008 我需要可执行文件尽可能快地运行 该程序大部分时间都花在处理各种大小的整数上 并且执行很少的 IO 显然 我会选择最大优化 但似乎可以做很多不属于
  • 在 bash 脚本中检测鼠标点击

    我想知道如何在后台运行 bash 脚本 每当用户单击鼠标时该脚本都会执行某些操作 即运行脚本或命令或其他任何内容 即使终端关闭 我也希望它继续运行 有任何想法吗 谢谢 如果您使用的是X11 您可以尝试xdotool捕获鼠标事件 它会是这样的
  • Windows 上使用 g++ 的 Makefile,链接库

    我已经厌倦了 MSVC 6 以及每个人总是告诉我它是一个蹩脚的编译器等等 所以现在我决定尝试使用 vim 加 g 和 makefile 这是我的问题 我有以下 makefile This is supposed to be a commen
  • 如何使用正则表达式验证带有可选百分比符号的小数?

    正如问题的标题 我需要使用以下值验证正则表达式 最多 2 个小数位和 9 个整数 带有可选的百分比符号 Valid 10 0 1111111 12 15 2 10 2 3 Invalid 12 02 123456789123 123 I t
  • 在 Vista 上调用 RPC 时出现“不支持操作”

    我的应用程序使用 Microsoft RPC 进行进程间通信 当两个进程在同一台机器上运行并且一个进程尝试调用声明为 IDL 表示法 的方法时 error status t rpcMethod in pipe byte parameter
  • Windows:更改与文件类型关联的应用程序的名称/图标

    我想将 Windows 中的文件类型与特定应用程序相关联 但我需要这样做 以便当用户打开 打开方式 菜单时 列表中应用程序的名称和图标是针对该文件类型自定义的 即 不仅仅是可执行文件的名称和图标 这是因为该二进制文件是一个通用二进制文件 可
  • 正则表达式匹配bash变量

    我正在尝试修改 bash 脚本 当前脚本包含 print div class 1 div Where 1可能看起来像 Apprentice Historian Level 1 Historian Level 4 Master Histori
  • 设置 git 别名,但调用它会给出“找不到命令”

    我想在 git 中设置一个别名来计算存储库中的总行数 因此我进入 Git Bash 并输入以下内容 git config global alias linecount ls files z xargs 0 wc l 我输入命令后 没有出现错
  • Qt - ubuntu中的串口名称

    我在 Ubuntu 上查找串行端口名称时遇到问题 如您所知 为了在 Windows 上读取串口 我们可以使用以下代码 serial gt setPortName com3 但是当我在 Ubuntu 上编译这段代码时 我无法使用这段代码 se
  • 在 macOS 上使用 find 时出现“非法选项”错误

    我试图列出末尾仅带有字母 R 的文件 我用了find在 macOS 终端中如下所示 find type f name R 但我收到消息说illegal option t 第一个参数find是它应该开始寻找的路径 路径 表示当前目录 find
  • 如果我使用客户端计算机上未安装的字体,会发生什么情况?

    有人可以告诉我 如果我在 WinForms 应用程序中使用目标计算机上不可用的字体 会发生什么情况 它是否使用同一系列的字体 只是 Sans Serif 还是其他字体 您的应用程序将回退到 Segoe UI Tahoma 然后是 MS Sa

随机推荐

  • 模拟器上未收到 Firebase 消息

    我按照中的说明进行操作https stackoverflow com a 38626398 565212 https stackoverflow com a 38626398 565212将 SNS 到 FCM 连接到 Android 应用
  • 如何使用SLIM框架创建MySQL事务

    我正在使用Slim框架来创建一个RESTful API 如何创建一个事务来执行多个SQL语句和 或能够回滚其中一些语句 SLIM没有附带 MySQL 所以基本上你会用正常的方式 使用 PDO 或 MySQLi 来完成它 所以基本上 假设 P
  • 如何在 PySpark 的 UDF 中返回“元组类型”?

    All the 中的数据类型pyspark sql types are https spark apache org docs latest api python modules pyspark sql types html all Dat
  • 如何将原始字符串文字传递给 [[deprecated(message)]] 属性?

    我想将原始字符串文字传递给 deprecated message 属性作为消息 该消息被反复使用 所以我想避免代码重复 首先 我尝试使用 static constexpr 变量 static constexpr auto str R Use
  • 使用 openssl.exe 使用 256 位 RSA 密钥对 20 字节消息进行签名,但不在代码中

    我有一个 256 位私钥 我想用它来签署 SHA 1 摘要 20 字节 直接使用 openssl 似乎可以工作 回声并不重要 openssl dgst sha1 二进制 openssl rsautl sign inkey 256bit pr
  • 如何从 Cmd 运行 Perl 脚本而不在脚本路径前面键入“perl”?

    例如perl C Projects trunk PcApps BaseCamp Test smoketest pl C Projects trunk PcApps BaseCamp Test log txt 如果没有perl 将 pl 扩展
  • 如何在 jboss7 中配置静态上下文路径?

    我正在尝试找到一种在 jboss 7 中配置静态上下文路径的方法 我们正在从 jboss 4 2 升级 在该版本中 我们在 server xml 中有一个配置元素 如下所示
  • 将 jQuery UI 按钮添加到从 Ajax 加载的 UI 对话框

    我正在打开和关闭使用 ajax 动态创建的对话框 我希望能够让对话框中显示的按钮使用 jQuery UI 按钮 我可以通过调用 button button 来做到这一点 但这会影响每个按钮元素 我怎样才能具体只影响此对话框中出现的按钮 va
  • 用于探索 Windows Vista 音频设备链(树?)的工具

    新的 Vista Audio 子系统被设置为一系列设备 从输入开始 经过所有各种控制 如混音器和音量控制 然后到达各种端点 如扬声器或耳机 我的问题是 是否有一种工具可以显示系统中的所有端点设备以及哪些设备链接在一起 理想情况下 它会绘制拓
  • 重写 Amazon S3 静态 URL [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 为了从 Amazon S3 托管纯静态站点 重写 URL 和终端节点以便通过重写引擎 例如任何 Web 服务器 以更友好的方式访问其资源是唯一的途径吗
  • NVD3时间格式,带焦点图的线

    我正在使用带有焦点图的 nvd3 线的相当简单的示例 myData从我的 php 文件返回一个 JSON 对象 其中 x 坐标是 0 23 之间的数字 我想知道如何将 x 轴格式化为小时格式 d3 json get data php fun
  • Laravel 5.2 auth 更改“用户”表

    我使用了 Laravel 中的新功能 php artisan make auth 但是当我注册时它将使用数据库表users默认情况下 但我想将其更改为其他表 默认情况下它使用updated at and created at在那个表中 我也
  • Java I/O - 模拟 System.console() 的输入

    我正在为练习中创建的程序编写 JUnit 这意味着测试需要覆盖尽可能多的情况 并且我对程序中某些事情的实现方式没有任何影响 此外 该程序运行无限循环 在某一时刻 它要求用户输入一些内容 对于 JUnit 测试 我在另一个中运行该程序Thre
  • Python基础数据参考,相同参考列表

    假设我有两个列表 gt gt gt l1 1 2 3 4 gt gt gt l2 11 12 13 14 我可以将这些列表放入元组或字典中 看起来它们都是对原始列表的引用 gt gt gt t l1 l2 gt gt gt d l1 l1
  • css 无法在 github 页面上工作[关闭]

    Closed 这个问题需要调试细节 help minimal reproducible example 目前不接受答案 我无法让我的 CSS 显示在网站上 我真的不知道我在这里做错了什么 我对这一切都很陌生 所以我确信有些东西我看不到 这是
  • Django 如何在 DatabaseError: 查询超时后重新连接

    我有一个独立的脚本 它使用 Django ORM 从 Postgresql 读取 写入 我偶尔会收到此错误 数据库错误 查询超时服务器 意外关闭连接 这可能意味着服务器异常终止 在处理请求之前或期间 我需要重新建立连接并重试脚本中的处理代码
  • 我应该为 SSIS 项目签入哪些文件?

    在我的 SSIS 项目文件夹中 除了我创建的三个包 dtsx 文件之外 我还有额外的文件 有一个 ProjectName database 文件 一个 ProjectName dtproj 文件和一个 ProjectName dtproj
  • 可以有多个内容脚本用于不同的功能吗?

    我对此很陌生 但我正在尝试创建一个 chrome 扩展来操作网页上的 DOM 目前 我有两个按钮 每个按钮都会执行不同的任务 下面这段话有道理吗 另外 如果我有多个内容脚本 如何将它们都添加到manifest json中 弹出 js fun
  • 如何在 Google Play 商店上发布现有 ionic 应用程序的更新版本?

    我最近在 Play 商店上推出了我的第一个离子应用程序 现在我想发布更新版本 我有 keystore 文件及其密码 但我没有获得生成发布 apk 来更新我现有的 ionic 应用程序的步骤 我将不胜感激的帮助 谢谢 从改变开始android
  • WSL 从 Windows 运行 Linux,无需生成 cmd 窗口

    我在 cmd 中运行 WSL bash 我没有将它用于任何用途 它只是挂在那里以保持 WSL 系统的活动 当我启动 X 应用程序时 bash c DISPLAY 0 xmessage hello 我得到这个结果 我可以毫无问题地关闭命令窗口