我在Ubuntu Linux终端中经常使用命令xdg-open。然而,有两件事让我感到不爽:
- 是否有可能抑制错误消息?
- 是否有可能使命令始终完成?(也就是说,不继续运行,以便我在终端中获得另一个“新行”)。
第一个很简单。只需要
alias xdg-open="xdg-open 2>/dev/null"
# prompt is not shown until you close the calculator
$ gnome-calculator
# prompt is shown right after opening calculator and you can
# work on the shell even if you don't close it
$ gnome-calculator &
我可能回答晚了,但我遇到了与你相同的问题。
我尝试使用xdg-open启动一个URL,我的默认浏览器是Firefox,但是不是xdg-open而是Firefox出现了错误。
[user@user-pc ~]$ xdg-open https://www.google.de # the page opens fine, but firefox had an error
[user@user-pc ~]$
(process:3783): GLib-CRITICAL **: g_slice_set_config: assertion 'sys_page_size == 0' failed
# needed to press enter here
xdg-open已经成功关闭,但是火狐浏览器的错误信息依然存在,需要按回车键才能让bash继续运行。
为解决这个问题,我在新的Shell中调用了xdg-open,并将输出定向到/dev/null中:
bash -c "xdg-open https://www.google.de" 2> /dev/null
xdg-open
在不同的情况下会同时输出到标准输出和标准错误。值得注意的是,如果 Chrome 是你的默认浏览器并且你有一个窗口打开,它会在标准输出中打印 Opening in existing browser session.
,据我所知,没有办法禁用这个功能(没有 --quiet
或类似的选项)。所以为了抑制这个输出,你需要使用 xdg-open URL >/dev/null
(而不是 2>/dev/null
)。我还观察到,在一个全新的 Ubuntu 安装中,使用 Firefox 会在标准错误中打印出几个错误信息,但这些似乎反映了 Firefox 配置的实际问题(我没有进一步调查,我只是安装了 Chrome....)。
这个命令实际上是完成了的!只是看起来有点混乱,因为它启动了一个异步子进程,而这个进程是生成这个输出的,而在 shell 返回给你之后。你可以通过在 shell 中尝试 xdg-open URL; sleep 1
来观察到这一点 - 输出将在 sleep 完成之前打印出来,看起来会更正常。
解决这个问题最简单的方法(除了丢弃 xdg-open
的输出)就是在你的 shell 中按下回车键 - 这将为你打印一个新的提示行,使事情看起来正常。