すべてのコアLinuxコマンドには異なるstdout形式があるようです。さらに、他のスクリプト/アプリケーションは、これらの形式を常に簡単かつ安全に/一貫して解析できるわけではありません。
簡単な解析のために均一で一貫した出力を提供できるラッパー、仕様、またはライブラリがあります(例: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
代替案:一般的なシェルオブジェクトモデル
一部の殻は次のとおりです。パワーシェルコア機能間の一貫したデータペアのための共通の内部オブジェクトモデルがあります。 Linuxコアユーティリティに似たものはありますか?
関連質問
- すべてのCLIコマンドを互換性にするために "--json"パラメータを追加するようにGNUを擁護する方法は?
- https://unix.stackexchange.com/a/515886/457338
役に立つコメント
lshw
,lscpu
,ps
GNU coreutils の一部ではない スティーブン・チャジェラス- coreutilsはモノリシックではありません。牛に似た一種の栄養、おもちゃ箱(Android)または忙しい箱(ほとんどのその他)
ベストアンサー1
〜のようにタクラスは指摘したここで簡単な答えは「いいえ」です。歴史的に*nixオペレーティングシステムの「the」APIはC APIでした(man 1ではなくman 2で説明されています)。共通のコアシェルインタフェースが実際に役立つ唯一の場所は、C APIにアクセスできない言語です...つまり、シェルスクリプトを意味します。
シェルの主な機能はユーザーインターフェースです。
シェルは必然的にもはや単純なUIではありません。コマンドを相互にリンクし、あるコマンドから別のコマンドに使用するパラメータを取得できることは非常に便利です。言語は次のとおりです。最初からプログラミング言語で設計されています。
言い換えれば、ユニバーサルシェルインタフェースを作成するための市場圧力はありません。
少量のコードで作業を実行するために、迅速で簡単なスクリプトが必要な人はシェル(Bashなど)を使用します。良いAPIで強力なプログラムを書こうとする人は、Pythonのような言語やGoやCのようなコンパイルされた言語を使う傾向があります。
偶発的に解析された出力は通常推奨されませんls
。使用するのに最適ワイルドカードケーシング自体内で。