修改 xdg-open 的行为

7
我在Ubuntu Linux终端中经常使用命令xdg-open。然而,有两件事让我感到不爽:
  1. 是否有可能抑制错误消息?
  2. 是否有可能使命令始终完成?(也就是说,不继续运行,以便我在终端中获得另一个“新行”)。
我意识到2可能不可能实现,因为程序的工作方式,但我想1是可以的。
3个回答

12

第一个很简单。只需要

alias xdg-open="xdg-open 2>/dev/null"

如果您想要永久添加该行,请将其添加到~/.bashrc文件中。
虽然我建议您三思而后行,不要变得对错误视而不见。
第二个让我感到相当困惑。xdg-open 不应该是交互式的。在我的电脑上(Debian sid),xdg-open 执行命令并结束,即使命令本身尚未结束(即:您尚未关闭打开 URL 的应用程序)。我认为这应该是 xdg-open 在任何平台上的行为方式(它应该在任何 XDG 系统上完全相同,这就是它的目的)。
无论如何,对于您在 shell 中启动的任何命令,如果您希望它是非交互式的,也就是说,即使前一个命令尚未完成,也允许输入命令,您只需在其末尾附加 "&"。例如:
# 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 &

3

我可能回答晚了,但我遇到了与你相同的问题。

我尝试使用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

页面打开正常,没有显示任何错误 - 实际上什么也没有显示。无需按回车键。

0
我知道这是一个老问题,但我想澄清被接受的答案并回答第二个问题。
1.

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 中按下回车键 - 这将为你打印一个新的提示行,使事情看起来正常。


  • 网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接