如何在组织模式片段中显示 inxi 输出

How to show inxi output in an org-mode snippet

我需要在我的 org-mode 文档中添加一个片段来显示 inxi 的输出。 我试过

#+BEGIN_SRC sh
#!/usr/bin/bash

inxi -Fxxxza --no-host

#+END_SRC

但输出很乱,而不是 shell 上正常显示的内容。 例如

| 12System:                                      | 12Kernel                       | 4.19.126-1-MANJARO | x86_64           | 12bits          | 64             | 12compiler  | gcc             | 12v      | 10.1.0          |             |                  |              |                |           |          |      |    |

有没有办法让它看起来和我在 bash 上得到的输出一样接近?

提前致谢!

尝试

#+BEGIN_SRC sh :results drawer
#!/usr/bin/bash

inxi -Fxxxza --no-host

#+END_SRC

inxi 默认情况下想要使用颜色代码,因此它会为特定的 terminal/application/what 生成带有转义序列的输出你有没有:查看其手册页以了解 -c <number> 选项的详细信息.您可以将 -c 0 添加到调用中以去除颜色,但至少使输出可读:

#+BEGIN_SRC sh :results drawer
#!/usr/bin/bash

inxi -Fxxxza --no-host -c 0
#+END_SRC

您也可以尝试 raw 而不是 drawer 但这有缺点:如果您再次 运行 块,Org 模式会添加另一个 #+RESULTS: 块。

首先,您要确保您没有使用旧版 inxi,那是 3.x 之前的版本,虽然旧版可以正常工作,但没有很多专为处理这些确切情况而设计的功能.鉴于您使用的是 --no-host,我认为但不确定这是否意味着您使用的是 3.x 代 inxi。

如果 inxi 无法在终端或 shell 中检测到它 运行ning,它默认假设它在 IRC 客户端中 运行ning,这会改变行为。

如果输出包含“:”作为键:值分隔符,您可以很容易地看出是否是这种情况,如果没有,它认为它在 IRC 客户端中。但是,如果它是旧版 inxi,则这些行为无法预测,因此您要确保使用的是当前 inxi(3.1.04 是当前最新版本)。

--tty 标志告诉 inxi 就好像它在终端中一样,即使它无法检测到它是,这是为了处理像你这样的情况,inxi 直接在其他程序中使用。

-c0 [即零] 标志告诉它删除所有颜色代码。

如果您正在使用当前的 inxi,或者至少 post 3.x inxi,您可以使用 -y 标志非常准确地分配输出宽度,并且 -y 80 给出非常可读的 80列结果。如果您想要不同形式的输出,例如每行单个键:值对,并且如果您使用的是最新的 inxi,我认为是 3.1.03 或更高版本,您可以使用 -y1 标志来触发它。如果 -y1 returns 错误,则 inxi 不够新。

-a 暗示 -xxx 所以你的命令看起来像这样:

inxi --tty -y80 -c0 --no-host -Faz

在最新的 inxi 中,这被缩短了,因为 -y 在没有其他值跟随时默认为 80,因此它可以是:

inxi --tty -c0 --no-host -Fazy

-y 的宽度在标准模式下为 80 到任何你想要的,取决于你希望数据以你想要输出的格式显示的方式。

请注意,如果相关,inxi 也有 json 和 xml 输出选项,但对于大多数人来说,使用这些选项比仅仅配置输出宽度要难一些。

如果您(或将来阅读本文的其他人)使用的是旧的 2.x.xx 类型 inxi,它仍然卡在各种发行版冻结池中,那是一个障碍,因为它没有处理任何这些场景非常好,虽然它确实有超级基本的 -y 控件,但它们工作得不是很好。它也没有 --tty 选项,也没有很好的宽度输出控制。

请注意,从 3.0 开始,inxi 通常会确定其输出正在被重定向,并自动关闭颜色代码,但这并不总是发生,尤其是在您遇到的情况下,inxi 正在被重定向 运行 直接通过其他东西,例如 Chef,使用 -c0 永远不会受到伤害,因为它是绝对覆盖。但在大多数情况下(除非程序直接调用它 运行,而不是通过 shell 或其他此类方法)inxi 现在将检测到它应该删除颜色代码,除非被迫离开他们在那里 -c [非零数].