Coreutils

核心 linux 命令是否有統一的標準輸出數據格式(用於一致/易於解析)?

  • January 24, 2022

似乎每個核心 Linux 命令都有不同的標準輸出格式。此外,其他腳本/應用程序並不總是容易/安全/一致地解析這些格式。

是否有包裝器或規範或庫提供統一/一致的輸出以便於解析(如 JSON 或 UniqueName:Value 編碼)?

範例 1:ps -A

   PID TTY          TIME CMD
   558 tty1     00:00:00 startx
   576 tty1     00:00:00 xinit
   577 tty1     00:00:37 Xorg
   590 tty1     00:00:01 awesome
  8281 pts/0    00:00:00 ps

範例 2:lshw / lscpu

雖然lshw是鍵:值輸出,但很難解析成唯一的鍵:值對。

cedar
   description: Computer
   width: 64 bits
   capabilities: smp vsyscall32
 *-core
      description: Motherboard
      physical id: 0
    *-memory
         description: System memory
         physical id: 0
         size: 7936MiB
    *-cpu
         product: Intel(R) Core(TM) i5-6300U CPU @ 2.40GHz
         vendor: Intel Corp.
         physical id: 1
         bus info: cpu@0
         size: 2611MHz
         capacity: 3GHz
<SNIP>

範例 3:ls -l

total 36
drwxr-xr-x  2 guy guy 4096 Nov 19 08:41 Desktop
drwxr-xr-x  2 guy guy 4096 Dec 26 13:37 Downloads
drwxr-xr-x  3 guy guy 4096 Nov  7 19:39 go
drwxr-xr-x  6 guy guy 4096 Jan 15 12:42 play
drwxr-xr-x 12 guy guy 4096 Jan 16 19:27 repo
drwxr-xr-x  3 guy guy 4096 Oct 15 18:39 RiderProjects
drwxr-xr-x  8 guy guy 4096 Jan 13 17:38 scripts
drwxr-xr-x 12 guy guy 4096 Jan 10 16:48 source
drwxr-xr-x  6 guy guy 4096 Jan  4 14:31 temp

例 4。file /bin/bash

/bin/bash: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=6c75f9f0f273cf6549f078b042c0a3f5a04f0357, for GNU/Linux 4.4.0, stripped

替代方案:通用外殼對像模型

PowerShell Core等一些 shell具有通用的內部對像模型,用於在函式之間進行一致的數據配對。有類似 linux core utils 的東西嗎?

相關問題

有用的評論

正如Taqras 所指出的,這裡的簡單答案是“不”。從歷史上看,*nix 作業系統的“the”API 一直是 C API(如 man 2 而不是 man 1 中所述)。通用核心 shell 介面真正有用的唯一地方就是無法訪問 C API 的語言……我的意思是在 shell 腳本中。

shell 的主要功能是作為使用者界面。

不可避免地,shell 已經不僅僅是一個簡單的 UI。能夠將命令粘合在一起,從一個命令中獲取參數以在另一個命令中使用是非常有用的……但是當您正在尋找強大的解析和通用介面時,是時候轉向已經設計好的成熟的程式語言了從一開始就作為一種程式語言。

簡而言之,創建通用外殼介面的市場壓力並不大。

那些想要快速簡單的腳本用少量程式碼完成某事的人將使用 shell(Bash 等)。那些想要編寫具有良好 API 的健壯程序的人傾向於轉向 Python 之類的語言或 Go 或 C 之類的編譯語言。


ls通常不鼓勵順便解析 的輸出。最好在外殼本身內使用萬用字元。

引用自:https://unix.stackexchange.com/questions/686687