最も移植性の高いsed、awk、perl、shはどれですか?


15

誰かがこれらのツールを移植性の順に並べることができますか?これらのうち、最小の* nixシステムでさえ確実に見つかるのはどれですか?それらのいずれかが100%確実に存在しますか?私の推測では、順序は次のとおりです。

  1. awk
  2. sed
  3. sh
  4. perl

Bourneシェルにデフォルト設定されていないシステムがあると想像しますが、一部のシェルはデフォルトとして存在します/bin/sh。ボーン型のシェルでない場合はおそらくそうではありません。両方awksedPOSIX仕様でそれらを説明するページがあるので、おそらくそれらは常に存在するでしょう。そうですか?いずれの* nixにも両方がインストールされると確信できますか?組み込みシステムを含めますか?


組み込みシステムは、移植性を犠牲にして最小限に抑えることがよくあります。多くはPOSIXに準拠していません。
ヨルダン14

@jordanmは、おそらくこれらのどれも持っていないかもしれないということですか?少なくとも最小限のシェルインターフェイスを提供するシステムを想定しています。私はbusyboxのが提供する知っているshawksedの例と私のbusyboxのベースのNASのためにも、Perlを持っています。
テルドン

1
あなたはそれらを持っているかもしれませんが、彼らがすることはシステムによって異なりますので、質問はそれが述べられているようにあまり意味をなしません。
ステファンシャゼル14

@StephaneChazelasああ、それを絞り込むのを手伝ってもらえますか?これらがシステムXで見つかる可能性の観点から、これらをソートすることはできませんか?私の経験は厳密にLinuxといくつかの組み込みNASシステムです。これらの4つすべてがなければGNU / Linuxを入手することは決してないでしょうが、どれが存在すると仮定するのが最も安全であるかを教えていただけませんか?
テルドン

回答:


14

最も移植性の高いsed、awk、perl、shはどれですか?

sedshおよびawkPOSIXで指定されている移植性perlは、標準に裏付けられていないわけではありません。

誰かがこれらのツールを移植性の順に並べることができますか?

準拠コードに固執する場合、3つのPOSIXコマンドの移植性の順序はありません。

これらのうち、最小の* nixシステムでさえ確実に見つかるのはどれですか?

OSをPOSIXにするには、3つのPOSIXのものと他の多くのユーティリティが必須です。ただし、最小化のためにそれらの一部を欠いているOSや、不完全/不適合な実装を提供しているOSは存在します。

実際、オペレーティングシステムのようなほとんどの(すべてではないにしても)フリーでオープンソースのUnixは、おそらく、試してみると適合プロセスに合格しません。

それらのいずれかが100%確実に存在しますか?

OSのような* nixがBourne構文ベースのシェルを欠いているのを見て驚いたでしょうが、特に組み込みシステムでは何でも可能です。

私の推測では、順序は次のようになっています:いくつかのシェルがデフォルトとして存在しますが、それは常に/ bin / shにありますか?

/bin/shBourne構文ファミリシェルである可能性がありますが、POSIX準拠のシステムであっても、POSIX準拠であることは保証されません。たとえば、/usr/xpg4/bin/shSolaris 10以前/bin/shで、POSIXではないレガシーのオリジナルのBourneシェルです。


12

Autotoolsからヒントを得る:どこでもsed動作する何かを書かなければならない場合は、BourneとPOSIXシェルの最小公分母(おそらく拡張される)に固執します。何かが壊れるシステムが存在する場合がありますが、書き直すことでそのような問題を回避できます。

例えば、いくつかの古代のシステムは、内の拡張エラーの問題を抱えてtest別名を、[

 if [ $foo = bar ] ; then...

そのAutoconfの練習は、それを書き換えることであるので、同様に、単一文字のプレフィックスで二重引用符で:

 if [ x"$foo" = "xbar" ] ; then...

"x$foo"ここでも使用できます。可能性に対するこの警備員$fooに有効なオプション可能性がありtest(1)、それ以来は[のための別名であるtestことが式を誤解可能性があり、。解決策は、不明な引数が[常に始まる状況を設定xすること[です。つまり、それは特別な意味を持つことができません。

(Autoconfはのtest代わりにを使用することも推奨しますが[、そのアドバイスはM4との競合の可能性への反応として生じ[ます。M4は構文でも使用します。)

awkはPOSIXなので、理論的にはどこでも利用できます。Busyboxにもありますので、awk非常に制限の厳しい組み込みLinuxシステムにも実装できます。それでも、なしawkでシステムに出会っても驚くことはないでしょうsed。私はそれが複雑さに帰着すると思う:より単純なツールは攻撃的なトリアージを生き残る可能性が高い。

Perlは、POSIXなどの広く普及している標準の一部ではないため、ターゲット環境について事前に何も知らなければ、単純にそれを当てにすることはできません。Perlはデフォルトでは次の場所にはインストールされません。

  • シグウィン
  • FreeBSDおよびNetBSD
  • Slackwareを含む一部のLinuxの「最小」インストール
  • ユーザーランドで主にBusyboxに依存する多くの組み込みLinux

Autoconfマニュアルには役に立つシェルプログラミングに関する章があります。ツールが好き最後のセクションカバーsedawkおよび多くの他。


ありがとう、しかし、私はこれらの移植性の順序について疑問に思っています。私があなたを正しく読めば、あなたはそれを提案しshsedおり、最もポータブルです。OK、他の人は?そして、sh本当にそのポータブルですか?デフォルトのシェルがCシェル派生物である場合はどうなりますか?そのようなシステムにはまだシンボリックリンクがあり/bin/shますか?
テルドン

編集のおかげで、sedそれawkがビジーボックスによって提供されていますが、何もsedなかったのに驚いたのはなぜですか?busyboxの代替品もsedとawkを提供するかどうかご存知ですか?
テルドン

Re:POSIX vs Bourne shell、2つのLCDに固執するアドバイスを書き直しました。再:クォートをテストし、その理由を思い出しませんでしたが、Autoconfマニュアルで理由がカバーされている章を見つけ、それに応じて答えを編集しました。Re:sed vs awk and Busybox、私はそれを説明しました:より大きな複雑さとトリアージ。sedより少ないので、そのバイナリは小さくなるので、それを削除する理由awkはかなり複雑です。(私のシステムでは20 kiBと48 kiBです。)Re:Busyboxの代替案、私は他のワンストップショッピングの代替案を知りません。
ウォーレンヤング14

+1ここでの一般的な前提に同意するため(最低sh公約数は何らかの種類である-テルドンのランクが奇数で、このo_O awksed超える?)建物、期間を意図していない場合があります。
goldilocks

1
@WarrenYoungそれは私が思っていたようなものです。すべての* nixシステムにデフォルトでbourneシェルが実際にインストールされるかどうかはわかりません。すべてにが付いている/bin/sh場合、状況は異なりますが、すべてが付いていること知りませんでした。ちなみにこれを受け入れないで申し訳ありませんが、あなたの質問とjlliagreの回答の間で引き裂かれました。私が彼を選んだのは、それがより直接的に対処し、彼の担当者が少ないからです:)。
テルドン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.