処理するファイルごとに、STDOUTに異なるデータ型を送信できるスクリプトがある場合。 STDINを読み取る他のスクリプトからどのデータ型が何であるかを知るために、各データ型をどのように分離しますか?
例えば。処理するすべてのファイルに対して、2つの異なる(不明な)文字列と2つの異なる(不明な)数を生成するスクリプトがあります。次に、STDINからデータを読み取り、指定された各文字列である数値を処理する別のスクリプトがあります。 2番目のスクリプトが各タイプを正しく認識するように、最初のスクリプトの出力形式をどのように指定しますか?
私はJSONを介してネットワークデータをシリアル化することに慣れています。しかし、STDIN / STDOUTのためのより軽いソリューションまたは組み込みのソリューションがあるかどうか疑問に思います。たぶん、一意の区切り記号や私が逃したものはありますか?
ベストアンサー1
標準出力とは何か、どこに行くのか説明していません! (例えば、標準出力はコンピュータグラフィックス画像処理アプリケーションは一部のブラウザに間接的にアクセスします。
これUnixの哲学そしてUnixパイプstdinとstdoutがプレーンテキストであることを願っていますが、これは単に習慣。場合によっては、他の規則があるかもしれません(例えば、通常はlpr
標準lp
入力からPDFを好む)。
プログラムを作成する場合は、JSONやXMLなどのより構造化されたテキストを出力するための特定のスキーマ(たとえば、いくつかのプログラムパラメータで指定)があるかもしれません。CSVまたはYAML。参考にしてくださいジャックJSONを処理できます。
一部のプログラムは(イサティそして/または統計資料)彼らの場合標準出力(またはそれら標準入力)は端末であり、それに応じて動作します(おそらく以下を使用して)。呪い、テミオスまたはANSIエスケープコード)。
多くのテキスト形式(特にXML)には伝統的な開始文字またはヘッダーがあるため、場合によってはこれを推測する必要があります(例:ファイル形式)ことが可能です。また見てくださいジェスチャー広大極 そしてlibmagic(そしてファイル1))。
処理するすべてのファイルに対して、2つの異なる(不明な)文字列と2つの異なる(不明な)数を生成するスクリプトがあります。次に、STDINからデータを読み取り、指定された各文字列である数値を処理する別のスクリプトがあります。 2番目のスクリプトが各タイプを正しく認識するように、最初のスクリプトの出力形式をどのように指定しますか?
不明な文字列を十分に知り(文書化)した場合は、改行文字などの制御文字を含めないでください。一つ行)特定の形式を決定できます。
FIRSTSTRING:
最初の文字列
FIRSTNUMBER:
最初の数字
例えば
FIRSTSTRING: foo bar is nice!
FIRSTNUMBER: 42
次に、2番目のスクリプトは簡単なawk
スクリプトを作成して使用します。sed
つまり、決めて文書あなたの場合は単純な一時的な形式です。可能JSONよりも処理が簡単です。必要に応じて、独自の一時セッションを持つことができます。文書(たぶん一部を使ってEBNFシンボル)。
多くのツールにはすべてが用意されています。たとえばps
、、、、および一時的ls
でよく文書化された出力形式と規則があります。同じdf
ifconfig
工程(5)。したがって、多くのスクリプトがこれらの出力を解析できます。
しかし、JSONはシンプルで柔軟でスケーラブルに設計されています。普段着文字列(制御文字、複数行などを含む)。これがあなたにとって重要な場合は、それを使用してください。
JSONまたはXMLを出力するために、すべてのUnixユーティリティを再作成して再実装できます。たくさん働く)。例えば、一部の人々は再創造した。工程(5)そして生産システムのカーネルデータを一部のXML形式で出力するファイルシステムで/xmlproc/
はなく、擬似ファイルシステムを備えたカーネルモジュールです。/proc/
しかし、それはうまくいきませんでした!社会的慣習は非常に重要です(そのような重要な理由は次のとおりです)。文書出力形式(少なくとも長いコメント)
(JSONまたはXMLを使用してもどのように使用するかを文書化する必要があります)
ところで、既存の多くのUnixツールはルールに微妙さを追加できます。たとえば、ファイルパスにはスペース、タブ、またはキャリッジリターンを含めることができます(参照:パス解像度(7))しかし、目をつぶすこともできます(だから私は決してしません)。$HOME
理論的には、一部のユーザーのディレクトリには戻り文字やコロンを含めることができますが、これはほとんどのツールに影響を与えます。パスワード(5)...).ダッシュで始まるファイルパスは、非常に長いパスと同じくらいわかりません。たとえば、$HOME
理論的には長さは3000文字ですが、実際には賢明ではありません。