UnixでPowerShellに相当しますか?


21

複雑なシェルコマンドがAWKを使用したテキスト出力の解析を伴う場合、常に厄介なことに気づきました。基本的に、構造化データをテキストに変換し、テキストを再度解析して構造化データに戻ります。

PowerShellはWindowsシェルであり、テキストだけでなくシェルコマンド間で型指定されたオブジェクトをパイプできるようにすることで、この問題を回避します。

PowerShellのような、テキストベースではなくオブジェクトベースのUnixシェルはありますか?

回答:


24

いいえ、それは逆です。spoon ^ H ^ H ^ H構造化データはありません。テキストのみがあります。

Unixの哲学の大部分は、テキストを出力し、入力としてテキストを受け入れるという考え方に基づいています。これについての良い説明がある「The Unix Art of Unix Programming読むことを検討したいかもしれません。

誤解しないでください。私はあなたの主張を理解しており、あなたが何を得ようとしているのかを知っています。RubyやPythonのインタラクティブインタープリターなど、シェルとして使用できるものがありますが、Bashほど基本的なタスクに適していません。たとえば、ディレクトリを変更してみてください。

また、シェルでオブジェクトを使用することは、それだけではありません。シェルのみがこれをサポートしている場合、Unixでは、あなたは途方に暮れるでしょう。grep、awk、sedなど、標準のUnixテキスト操作ツールはすべて変更する必要があります。

数年前にこのようなものを作成する試みがあったと思いますが、名前を思い出すことができず、長い間聞いたこともありません。おそらく離陸しないでしょう。


2
興味深いことに、テキストストリーム(または実際にはバイトストリーム)をデータオブジェクトストリームに置き換えても、この本で定式化された一般原則に反することはありません。「表現の規則」でよりよくプレイするようです。unixがプログラム間のインターフェイスとしてテキストストリームを選択しただけです。
ウィムコーネン

1
しかし、「データオブジェクト」とは、実際のP​​ython / Ruby / C ++オブジェクトまたはC構造体のようなものですか?
wzzrd

3
+1「スプーンを曲げようとしないでください、それは不可能です。代わりに、真実を理解しようとするだけです...スプーンはありません。」インターフェースとしてのテキストではなく、インターフェースとしてのデータストリームです。オブジェクトは、プログラミングのための素晴らしいですが、時には彼らはにあなたの心を置くために少し小さな刑務所になっ...
エイブリー・ペイン

2
zsh> bash。私の意見ですが、zshを試していない場合は本当に
-xenoterracide

2
@WimCoenenは、「構造化データ」を中心に出荷しているため、全員とティリーおばさんが「構造」とは何かに同意する必要があります。のようなものもls(1)。完全に役に立たない。
フォンブランド


4

プロジェクトがあり、その目標はPowerShellと類似しています:Hotwire。通常のshとpythonスクリプトおよびウィンドウ/グラフィック環境を組み合わせます。あなたはそれを見てみることができます。

既存のプログラムをラップするか、Pythonライブラリを使用して独自のオブジェクトで拡張できるオブジェクト指向パイプラインに基づいています


1
それは私が名前を忘れようとしていたプロジェクトです!トランクでの最後のコミット:2年前...
wzzrd

4

PowerShellは2016年にオープンソースになりました。それ以来、ますますマルチプラットフォーム化が進んでいます。ソースコードはGitHubで入手できるため、多くのUNIXライクシステム用のインストールパッケージも入手できます。


1

大半のインタープリター(またはコンパイル済み)スクリプトを記述し、インタープリターのシェル内でそれらを呼び出すことにより、そのほとんどを達成できると思います。

これは、少なくともRuby、Perl、Python、Haskell(例、GHCi)、JavaScript(例、node.js)、Matlab、およびその他の言語で実行できます...


オブジェクトであるパイプは、遅延評価などを実行できることを意味します。したがって、パイプにファイルオブジェクトのセットを渡す場合は、名前または変更日ではなく、コンテンツに関心があります。JSONで渡すデータは何ですか?回答:状況によります。パイプのコンシューマーがデータをプルする場合、正しいデータを要求できます。問題が解決しました。
ナイジェルソーン

1

3年後の別の考え:XMLまたはJSONのいずれかを使用して、テキストストリームでオブジェクトを表すことが可能です。私はJSON(よりシンプル)を好みます。実際、古典的な* NIXユーティリティJSONサポートを提供するプロジェクトがあります。例:https : //github.com/step-/JSON.awk

AWKなどの従来の* NIXプログラムにオブジェクト型モデルを使用する場合の問題の1つは、オブジェクト指向モデルが実際にOOサポートを持たないことです。たとえば、AWKには連想配列がありますが、配列は多次元ではありません(AWK配列の各要素は数字または文字列である必要があります。配列はAWKの配列オブジェクトにすることはできません)。


Clojureはednを提供します。これにより、JSONが制限されている間、すべての種類の型指定されたデータをシリアル化/逆シリアル化できます。
マリオ14
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.