Coreutils
核心 linux 命令是否有統一的標準輸出數據格式(用於一致/易於解析)?
似乎每個核心 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 的東西嗎?
相關問題
有用的評論
lshw
,lscpu
,ps
不是 GNU coreutils Stéphane Chazelas 的一部分- coreutils 不是單數:GNU、toybox(Android)或busybox(大多數其他)
正如Taqras 所指出的,這裡的簡單答案是“不”。從歷史上看,*nix 作業系統的“the”API 一直是 C API(如 man 2 而不是 man 1 中所述)。通用核心 shell 介面真正有用的唯一地方就是無法訪問 C API 的語言……我的意思是在 shell 腳本中。
shell 的主要功能是作為使用者界面。
不可避免地,shell 已經不僅僅是一個簡單的 UI。能夠將命令粘合在一起,從一個命令中獲取參數以在另一個命令中使用是非常有用的……但是當您正在尋找強大的解析和通用介面時,是時候轉向已經設計好的成熟的程式語言了從一開始就作為一種程式語言。
簡而言之,創建通用外殼介面的市場壓力並不大。
那些想要快速簡單的腳本用少量程式碼完成某事的人將使用 shell(Bash 等)。那些想要編寫具有良好 API 的健壯程序的人傾向於轉向 Python 之類的語言或 Go 或 C 之類的編譯語言。
ls
通常不鼓勵順便解析 的輸出。最好在外殼本身內使用萬用字元。