从终端上的命令行输出创建超链接

Fed*_*eli 13 command-line gnome-terminal 21.10

当不带参数执行该命令hostnamectl时,会将一堆信息转储到终端。其中之一是Operating System下面示例输出中所示的行:

$ hostnamectl  
 Static hostname: xxxxxx
       Icon name: computer-laptop
         Chassis: laptop
      Machine ID: e8..43
         Boot ID: 7b..2a
Operating System: Ubuntu 21.10
          Kernel: Linux 5.13.0-28-generic
    Architecture: x86-64
 Hardware Vendor: XXXXXX
  Hardware Model: XXXXXX
Run Code Online (Sandbox Code Playgroud)

但是,输出“ Ubuntu 21.10”像超链接一样带有下划线,当您Ctrl单击时,它将打开一个带有以下链接地址的网络浏览器:https://ubuntu.com/

这是如何实现的?我需要从基于文本的程序或脚本输出哪些终端命令(转义序列?)以在终端上创建此类超链接?

Fed*_*eli 19

Ask Ubuntu中没有此信息,但我在另一个站点中找到了答案:https ://gist.github.com/egmontkob/eb114294efbcd5adb1944c9f3cb5feda

创建上述链接的转义序列是:

printf '\e]8;;https://ubuntu.com/\e\\Ubuntu 21.10\e]8;;\e\\\n'
Run Code Online (Sandbox Code Playgroud)

一般格式为:

  1. 超链接打开序列开始于
  • 转义\e]8 序列( ESC, ], 和8),
  • 参数,
  • 目标URI,以及
  • 结束\e\ 转义序列(ESC\)

其中params是可选的: \e]8;params;URI\e\\

  1. 然后是将被绘制为超链接的内容。

  2. 超链接使用相同的转义序列(如步骤 1 中所示)关闭,但省略paramsURI,但保留分隔符:\e]8;;\e\\


作为这个答案的额外好处,我建议您在文件中使用以下别名~/.bash_aliases

alias ll="LC_COLLATE=C ls --hyperlink=auto --group-directories-first --color=auto -alF"
Run Code Online (Sandbox Code Playgroud)

在这里,--hyperlink参数将指示ls命令在终端输出上自动创建文件名的超链接,这样当单击它们时,它们将在Nautilus或关联的应用程序Ctrl中打开。