* nix用のオブジェクト指向シェル

* nix用のオブジェクト指向シェル

はじめに:私はbashが好きで、何らかの議論や神殿を始めるつもりはありません。これが非常に素朴な質問ではないことを願っています。

この質問は多少関連しています。この投稿スーパーユーザーに関しては、OPが彼が要求するものが何であるかを実際に知らないようです。私はFreeBSD、Linux、OS Xでbashを使用し、Windowsではcygwinを使用します。最近では、WindowsでPowerShellを使用した経験もたくさんありました。

bashと互換性がありますが、オブジェクト指向のスクリプト層を混合に追加する* nix用のシェル(すでに利用可能または開発中)はありますか?私が知っている唯一のものはPythonコンソールですが、私が知っている限り、それは標準のシェル環境へのアクセスを提供しません。たとえば、Pythonコンソールではcd ~andを使用できませんlschmod +x fileこれを行うには、標準のUnixバイナリの代わりにPythonを使用するか、Pythonコードを使用してバイナリを呼び出す必要があります。

そんなシェルが存在しますか?

ベストアンサー1

シェルには3つの理想的な機能があると考えられています。

  • 対話型ユーザビリティ:頻繁に使用するコマンドをすばやく入力できる必要があります。
  • プログラミング:データ構造、並行性(作業、パイプライン...)
  • システムアクセス:ファイル、プロセス、ウィンドウ、データベース、システム構成の処理...

Unixシェルはインタラクティブな側面に焦点を当て、ほとんどのシステムアクセスといくつかのプログラミングを以下の外部ツールに下請契約する傾向があります。

  • 紀元前簡単な数学のために
  • OpenSSL暗号化のため
  • sedアッその他のテキスト処理用
  • CNCデフォルトのTCP / IPネットワークで使用
  • ftpFTPの場合
  • mailMailなどmailx基本メールの場合
  • cronスケジュールされたジョブの場合
  • コントロールパネル基本的なXウィンドウ操作の場合
  • デコフKDE ≤3.x ライブラリの場合
  • バスツール(dbus-*またはバス)さまざまなシステム情報と構成作業(KDE ≥4などの最新のデスクトップ環境を含む)

正しいパラメータまたはパイプ入力を使用してコマンドを呼び出すと、非常に多くのことができます。これは非常に強力なアプローチです。すべてのタスクを正しく実行するツールを持つことは、すべてのタスクを正しく実行できない単一のプログラムよりも優れています。しかし、限界があります。

私が求めている「オブジェクト指向スクリプト」の要件であるUnixシェルの主な制限の1つは、1つのコマンドから次のコマンドに情報を保持するのに慣れていないか、パイプでより速いということです。特に、プログラム間通信はテキストベースであるため、互換性のある方法でデータをシリアル化する場合にのみアプリケーションを組み合わせることができます。これは祝福と呪いです。すべてのテキストアプローチを使用すると、簡単な作業をすばやく完了できますが、より複雑な作業には障壁が追加されます。

インタラクティブなユーザビリティもプログラムの保守性に反します。インタラクティブプログラムは短くなければならず、参照はほとんど必要ではなく、変数宣言や入力などでユーザーを邪魔しないでください。メンテナンス可能なプログラムは読み取り可能でなければならず(頭字語が多いことはありません)、読み取り可能でなければならず(したがって、単語が文字列、関数名、変数名などであるかどうか疑問に思う必要はありません)、一貫している必要があります。たとえば、変数宣言や型などを確認します。

通常、シェルはアクセスしにくい妥協点です。わかりました、これで豪言長談は終わりました。たとえば、見てみましょう。


  • これパールシェル(psh)「Unixシェルの対話型特性とPerlの強力な機能を組み合わせます。」単純なコマンド(パイプを含む)はシェル構文を使用して入力できます。それ以外はすべてPerlです。このプロジェクトは長い間開発されてきました。使用できますが、純粋なPerl(スクリプト用)または純粋なシェル(対話型またはスクリプト用)の代わりに使用を検討するのではありません。

  • Python特に、数値および並列コンピューティングのための改良された対話型Pythonコンソールです。これは比較的若いプロジェクトです。

  • irb(対話型ルビー)Pythonコンソールに対応するRubyです。

  • SSH伝統的に、UNIXシェルで見つかったシステムバインディングタイプ(文字列、プロセス、ファイル)を使用するスキームの実装(つまり、優れたプログラミング言語)です。ただし、対話型シェルとして使用するためのものではありません。

  • 扱いにくい強化された対話型シェルです。その強みは、相互作用性(コマンドラインの編集、完成、簡潔で難しい構文を使用して実行される一般的な作業)です。プログラミング機能はkshと同様に優れていませんが、端末制御、正規表現、ネットワーキングなどのための多くのライブラリが付属しています。

  • Unixスタイルのシェルのすっきりとしたスタートです。より良いプログラミングやシステムアクセス機能はありません。 shとの互換性が壊れているので、より良い機能を発展させる余地がたくさんありましたが、そのようなことは起こりませんでした。


付録: Unix ツールキットの別の部分は多くをファイルとして扱います:

  • ほとんどのハードウェアデバイスはファイルとしてアクセスできます。
  • Linux では、/sysより多くのハードウェアおよびシステム制御が提供されます。
  • 多くのUNIXバリアントでは、ファイルシステムを介してプロセス制御を実行できます/proc
  • ヒューズ新しいファイルシステムを簡単に作成できます。動的にファイル形式を変換し、さまざまなネットワークプロトコルを介してファイルにアクセスし、アーカイブの内部を表示するなどの機能を提供する既存のファイルシステムがすでに存在しています。

おそらくUnixシェルの将来は、コマンドを介したより良いシステムアクセス(およびコマンドを組み合わせたより良い制御構造)ではなく、ファイルシステムを介したより良いシステムアクセス(その組み合わせはわずかに異なります。まだ重要なイディオムは何ですか(例:まだシェルアンドチューブではありません)。

おすすめ記事