![Linux は POSIX と互換性がありますが、一部の POSIX コマンドが見つかりません。 [閉じる]](https://linux33.com/image/195774/Linux%20%E3%81%AF%20POSIX%20%E3%81%A8%E4%BA%92%E6%8F%9B%E6%80%A7%E3%81%8C%E3%81%82%E3%82%8A%E3%81%BE%E3%81%99%E3%81%8C%E3%80%81%E4%B8%80%E9%83%A8%E3%81%AE%20POSIX%20%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%81%8C%E8%A6%8B%E3%81%A4%E3%81%8B%E3%82%8A%E3%81%BE%E3%81%9B%E3%82%93%E3%80%82%20%5B%E9%96%89%E3%81%98%E3%82%8B%5D.png)
私はLinuxや他のUNIXシステム(おそらくOSX)用の小さなシェルスクリプトを作成したいと思います。そして原則としてプラットフォームに拘束されないのはどうでしょうか?
だから私は#!/bin/sh
shebangを使っていて、私のスクリプトの一部は文字列を圧縮する必要があるので、これが文字列またはストリームを圧縮するためのPOSIX基本ユーティリティであることを学ぶことにしました。予想通り、両方がリストされtar
ていません。gzip
https://pubs.opengroup.org/onlinepubs/9699919799/idx/utilities.html。しかし、私が期待していなかったのは、リストされたコンテンツがcompress
私のDebian 11 Bullseyeシステムにインストールされていないということです!
それでは、いわゆるすべてのPOSIX互換システムで利用可能なPOSIXコマンドにも依存することはできませんか?私はどこかでミスをしましたか?
答え1
私は多くのクロスプラットフォームツールを作成し、実際に興味を持っている必要がある2つのことがあります。
- コアロジック/言語はposixと互換性があり、うまく機能し、bashisms、zsh'ismsなどを避けるべきです。 POSIXコンプライアンスが重要で達成しやすい場所です。これはサブシェルコードで特に重要です。
- コアPOSIX shロジックをラッパーとして使用して、タスクを実行するために必要なツールをテストして計測し、使用します。可能性が最も高い位置から可能性が最も低い位置へ。私は理論的な「POSIXがそう言ったのでそこにあるべき」コーディングに時間や努力を注いだことがないと思います。私はいつもそこにいるものをテストして使用しました。もちろん、数行のコードが追加されますが、すべてを常に処理することが目標であれば、そうすることができます。
「圧縮」ツールについては、このスレッドの前に聞いたことがないと率直に言うことができます。そして、上記のコメントを見ると、現在使用されているツールほど良くないので、私がこのツールを持つようになった理由が当然です。いつもインストールされていますか?それとも簡単にインストールできますか?
複雑なものを見つけると、基本レベルで非常に簡単にしない限り、ロジックがどこでも機能する可能性が急速に低下します。確かにやれば、そうです。常に動作しますが、一度ツールを追加するとそれほど多くはありません。たとえば、システムの「awk」がデフォルトのawkであるとは信じられないかもしれません。
ツールをテストしないと悲しくなり、真のクロスプラットフォーム/クロスOS/クロスディストリビューションを作成することは成功しません。
それにもかかわらず、まだ正常に動作していないシステムが見つかったら、より多くのテストとフォールバックを追加して、その状況が機能するようにツールを更新する必要があります。これがまさに現在の方法です。以前見たことのない新しい状況のコンテンツを追加しただけです。
GNU / Linuxが複数のレベルでもはやほとんど従わない標準(システム?いいえ?、わかりました、次に進みます)を維持しようとしない限り、それは難しくありません。そうでないのは時間の無駄と無意味な欲求不満につながるだけです。
重要でないツールを使用しようとすると、これはより困難になります。この時点では、どのOSにもまったく依存することはできず、すべてのBSDが独自に実行するすべての亜種をテストして処理する必要があるためです。これをしないでくださいパッケージ配布を使用することを誇りに思ってください。しかし、OSには独自のコアツールが含まれています。つまり、ツールがすべてのバリアント/OSで同じ名前を持っていても、プラットフォーム全体で同じ出力に依存することはできません。または動作します。たとえば、psはOpenBSD、FreeBSD、Linux、さらにはwrtファームウェアで見られるビジボックスでも大きく異なります。
答え2
Linuxはおそらく(ほぼ100%)POSIXと互換性がありますが、すべてのディストリビュータはデフォルトでどのパッケージがインストールされるかを決定できます(そしてインストールプロセス中も同様です)。compress
パッケージマネージャを使って美しいDebianシステムにインストールしてみてはいかがでしょうか。
# sudo apt install ncompress
デフォルトでは、圧縮はもはや最新のアルゴリズムに比べて深刻で、compress
誰ももはや使用されません。ディストリビュータは、デフォルトでプログラムをインストールしないことを選択できます。bzip2
xz
また、見ることができます今回の発表Debian の POSIX 準拠について。